2 新增或刪除註冊表(Registry)中的項目。
3 修改重要的系統設置文件(如 Autoexec.bat、Config.sys、.INI 等)
INF的語法結構
[VERSION]
;系統根據Signuture看是不是適合當前版本,如果適合的話就執行,否則不執行,當然強制安裝是可以的
;用於WIN9X
Signature="$CHICAGO$"
;WINNT+
;Signature="$Windows NT$"
該行是可選的,如果沒有提供佈局信息文件,則在INF文件內必須包含[SourceDisksNames]和[SourceDisksFiles]節
LayoutFile=filename.inf
[SourceDisksNames]節羅列源文件所在盤符序列碼、盤描述符、盤卷標號和盤序列號。
[SourceDisksNames]節內語句的語法爲:
disk-ordinal=“disk-description”,disk-label,disk-serial-number
其中disk-ordinal爲必選項,是盤符序列碼,標識一個源盤,具有惟一性,一般可設置爲從1開始遞增的整數,0不是一個有效的盤符序列碼。當存在多個源盤時,盤符序列碼之間不能重複。
disk-description爲必選項,是盤描述符,用雙引號括起的字符串或字符串宏描述盤的內容或目的。安裝引擎將該字符串顯示在對話框內以提示用戶。
disk-label爲源盤的卷標識。
disk-serial-number未使用,但必須被設置爲0。
[SourceDisksFiles]節
[SourceDisksFiles]節指定安裝時使用的源文件和盤符序列碼、盤描述符。 [SourceDisksFiles]節內語句的語法爲:
file-name=disk-number[,subdir] [,file-size]
其中file-name爲必選項,是源盤上文件的名稱。
disk-number是包含file-name指定文件所在源盤的盤符序列碼,該盤符序列碼需在[SourceDisksNames]節中列出,並大於或等於1。
Subdir爲可選項,指定文件所在源盤的子目錄,如省略則源盤爲缺省安裝路徑。
file-size爲可選項,表明文件的大小,以字節爲單位。
[DestinationDirs]
;指定CopyFiles、RenFiles或DelFiles入口的缺省操作目錄
;語法file-list-section=LDID,[Subdir]
;LDID列表如下:
;01 ;current directory
;04 ;backup directory
;10 ;windows directory
;11 ;system dir
;12 ;iosubsys
;13 ;command
;14 ;control panel directory
;15 ;printers directory
;16 ;workgrou dir
;17 ;inf dir
;18 ;help dir
;19 ;administration dir
;20 ;fonts
;21 ;viewers
;22 ;vmm32
;23 ;color dir
;25 ;shared dir
;26 ;winboot
;28 ;host winboot
;30 ;root of boot drive
;31 ;root of host drive of a virtual boot drive
;32 ;old windows dir if exists
;以下例子爲安裝到window/web目錄下
;DefaultDestDir=10,"web"
提供了一個INF文件安裝過程的總覽,它識別文件內其他包含安裝信息節的詳細動作,是Windows內建安裝函數識別安裝過程和內容的真正入口[Install]
;[DefaultInstall]節節名DefaultInstall如前面表格內容所述被顯式地在註冊表中指定。
;該節也是系統獲取INF文件中安裝信息的首要入口,當用戶右擊INF文件選“安裝”時該節內容被執行。
;[OtherInstall]與[DefaultInstall]節遵循相同的語法,但必須被顯式地調用,常被用來定義反安裝動作
;缺省安裝節
[DefaultInstall]
ADDREG=add
;指明要刪除的註冊表子節,等號後面的爲自定義節名
DELREG=del
;指明要要複製的文件子節,用於安裝,Copyfiles命令可以替換系統正在訪問的文件。這些功能通過普通的del和copy命令都無法實現
CopyFiles=cfile
;指明要要刪除的文件子節,用於反安裝,多個節以逗號隔開,該命令如果發現要刪除的文件被鎖定,就會把文件放到系統刪除隊列中排隊
;等系統重啓動的時候,該文件就自動被刪除了
DelFiles=刪除文件段
;[刪除文件段]
;文件名列表
;例子:
;a.exe
;b.sys
RenFiles=重命名文件段
;語法:
;[file-list-section]
;new-file-name,old-file-name
;file1,file2 ;修改文件名file1爲file2
;更新INI文件段內容子節
UpdateInis = 更新INI文件段
;ini-file, ini-section, [old-ini-entry], [new-ini-entry], [flags]
;ini-file 包含要更改條目的 .ini 文件名
;ini-section 包含要更改條目的節名
;old-ini-entry 可選,常用形式爲 Key=Value
;new-ini-entry 可選,常用形式爲
;Key=Value。flags 是可選操作標記
;%01%/wincmd.ini, Configuration,,"InstallDir=%01%"
;%01%/wincmd.ini, Configuration,,"Mainmenu=%01%/LANGUAGE/TCExtMenu.mnu"
updateinifield =
ini2reg=aa.ini
updatecfgsys=更新autoexec.bat段
updateautobat=更新autoexec.bat段
[更新autoexec.bat段]
;定義資源節,像資源文件,調用時使用%REG_SZ%就代表了0x00000000
[Strings]
REG_SZ=0x00000000
REG_BINARY=0x00000001
REG_DWORD=0x00010001
[add]
;HKCU -> HKEY_CURRENT_USER
;HKCR -> HKEY_CLASSES_ROOT
;HKLM -> HKEY_LOCAL_MACHINE
;HKU -> HKEY_USERS
;HKU -> HKEY_USERS
;HKCC -> HKEY_CURRENT_CONFIG
;HKDD -> HKEY_DYN_DATA
HKCU,Software/Microsoft/Windows/CurrentVersion/Policies/System,DisableRegistryTools,1,0
;解禁IE的Internet選項
HKCU,Software/Policies/Microsoft/Internet Explorer/Restrictions,NoBrowserOptions,1,0
;解禁IE的Internet選項裏面的各個具體選項
HKCU,Software/Policies/Microsoft/Internet Explorer/Restrictions,NoBrowserOptions,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Settings,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,HomePage,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,GeneralTab,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Cache,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,History,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Colors,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Fonts,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Languages,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Accessibility,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,SecurityTab,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,SecChangeSettings,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,SecAddSites,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,ContentTab,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Ratings,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Certificates,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,CertifPers,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,CertifSite,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,CertifPub,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,FormSuggest,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,FormSuggest Passwords,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Wallet,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Profiles,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,ConnectionsTab,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Connection Wizard,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Connwiz Admin Lock,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Connection Settings,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Proxy,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,AutoConfig,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,ProgramsTab,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,ResetWebSettings,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Check_If_Default,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,AdvancedTab,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Advanced,1,0
;解禁下載(可單獨使用)
HKCU,Software/Microsoft/Windows/CurrentVersion/Internet Settings/Zones/3,1803,1,0
;自動修改IE標題欄文字、主頁、搜索頁等等
HKCU,Software/Microsoft/Internet Explorer/Main,Window Title,0,"Internet Explorer"
HKCU,Software/Microsoft/Internet Explorer/Main,Start Page,0,"http://www.20cn.net"
HKCU,Software/Microsoft/Internet Explorer/Main,Search Page,0,"http://www.20cn.net"
HKCU,Software/Microsoft/Internet Explorer/Main,Default_Page_URL,0,"http://www.20cn.net"
HKLM,SOFTWARE/Microsoft/Internet Explorer/Main,Default_Search_URL,0,"http://www.20cn.net"
HKLM,SOFTWARE/Microsoft/Internet Explorer/Main,Search Page,0,"http://www.20cn.net"
HKLM,SOFTWARE/Microsoft/Internet Explorer/Main,Start Page,0,"http://www.20cn.net"
HKLM,SOFTWARE/Microsoft/Internet Explorer/Main,Default_Page_URL,0,"http://www.20cn.net"
HKLM,SOFTWARE/Microsoft/Internet Explorer/Main,Default_Page_URL,0,"http://www.20cn.net"
[dfile]
;該節定義了將要刪除的文件列表,filename後面的1是一個標誌,指明如果文件當前無法刪除,就等到系統重啓動後刪除。
;格式:filename,,,1
;例子:
a.exe,,,1
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
INI 文件的操作
--------------------------------------------------------------------------------
概述
在程序中經常要用到設置或者其他少量數據的存盤,以便程序在下一次執行的時候可以使用,比如說保存本次程序執行時窗口的位置、大小、一些用戶設置的數據等等,在 Dos 下編程的時候,我們一般自己產生一個文件,由自己把這些數據寫到文件中,然後在下一次執行的時候再讀出來使用。在 Win32 編程中當然你也可以這樣幹,但 Windows 已經爲我們提供了兩種方便的辦法,那就是使用註冊表或者 ini 文件(Profile)來保存少量數據。本文中先介紹一下 .ini 文件的使用。
ini 文件是文本文件,中間的數據格式一般爲:
[Section1 Name]
KeyName1=value1
KeyName2=value2
...
[Section2 Name]
KeyName1=value1
KeyName2=value2
ini 文件可以分爲幾個 Section,每個 Section 的名稱用 [] 括起來,在一個 Section 中,可以有很多的 Key,每一個 Key 可以有一個值並佔用一行,格式是 Key=value,Win32 對 ini 文件操作的 api 中,有一部分是對 win.ini 操作的,有一部分是對用戶自定義的 ini 文件操作的。Win.in 和 system.ini 是Windows的兩個非常重要的初始化文件,Windows將用戶所作的選擇以及各種變化的系統信息記錄在這兩個文件中。System.ini
描述了系統硬件的當前狀態,Win.ini 文件則包含了Windows 系統運行環境的當前配置。由於 Win.ini 文件的重要性和常用性,Win32 中有專門對 Win.ini 進行操作的 api,它們是:
GetProfileInt - 從 Win.ini 文件的某個 Section 取得一個 key 的整數值,它的原形是:
GetProfileInt(
LPCTSTR lpAppName, // 指向包含 Section 名稱的字符串地址
LPCTSTR lpKeyName, // 指向包含 Key 名稱的字符串地址
INT nDefault // 如果 Key 值沒有找到,則返回缺省的值是多少
);
如果 Key 值沒有找到的話,返回值是 nDefault 指定的缺省值,如果 Key 中的值是負數,則返回 0,如果 Key 指定的是數字和字符串的混合,則返回數字部分的值,比如說 x=1234abcd,則返回 1234
GetProfileString - 從 Win.ini 文件的某個 Section 取得一個 key 的字符串,它的原形是:
GetProfileString(
LPCTSTR lpAppName, // 指向包含 Section 名稱的字符串地址
LPCTSTR lpKeyName, // 指向包含 Key 名稱的字符串地址
LPCTSTR lpDefault, // 如果 Key 值沒有找到,則返回缺省的字符串的地址
LPTSTR lpReturnedString, // 返回字符串的緩衝區地址
DWORD nSize // 緩衝區的長度
);
返回的字符串在緩衝區內,返回的 eax 值是返回的字符串的長度(不包括尾部的0)
GetProfileSection - 從 Win.ini 文件中讀出整個 Section 的內容,它的原形是:
GetProfileSection(
LPCTSTR lpAppName, // 指向包含 Section 名稱的字符串地址
LPTSTR lpReturnedString, // 返回數據的緩衝區地址
DWORD nSize // 返回數據的緩衝區長度
);
WriteProfileSection - 將一個整個 Section 的值 寫入 Win.ini 文件的指定 Section 中,它的原形是:
WriteProfileSection(
LPCTSTR lpAppName, // 指向包含 Section 名稱的字符串地址
LPCTSTR lpString // 要寫入的數據的地址
);
如果 Win.ini 沒有指定的 Section,API 會新建立一個並寫入數據,如果已經存在,則先刪除原來 Seciton 中所有的 Key 值然後寫入新的。
WriteProfileString - 將一個 Key 值寫入 Win.ini 文件的指定 Section 中,它的原形是:
WriteProfileString(
LPCTSTR lpAppName, // 指向包含 Section 名稱的字符串地址
LPCTSTR lpKeyName, // 指向包含 Key 名稱的字符串地址
LPCTSTR lpString // 要寫的字符串地址
);
如果 Win.ini 沒有指定的 Section,API 會新建 Section,如果沒有指定的 Key 則新建一個 Key 並寫入數據,如果已經存在,則用字符串代替原來的值。
以上的 Api 是對 Win.ini 操作的,當然對於我們來說,用的更多的是在程序運行的目錄中建立自己的 ini 文件,如果需要對自己的 ini 文件操作,就要用到另一組 Api,這一組 api 和上面的很象,只要把上面一組的 Profile 換成 PrivateProfile(私有的)就可以了,參數中也相應的多了一個 ini 文件名的參數。例如 GetPrivateProfileInt、GetPrivateProfileSection、WritePrivateProfileString 等等, 下面分別介紹:
GetPrivateProfileInt - 從 ini 文件的某個 Section 取得一個 key 的整數值,它的原形是:
GetPrivateProfileInt(
LPCTSTR lpAppName, // 指向包含 Section 名稱的字符串地址
LPCTSTR lpKeyName, // 指向包含 Key 名稱的字符串地址
INT nDefault // 如果 Key 值沒有找到,則返回缺省的值是多少
LPCTSTR lpFileName // ini 文件的文件名
);
中間參數和返回值的定義和 GetProfileInt 是一樣的。
GetPrivateProfileString - 從 ini 文件的某個 Section 取得一個 key 的字符串,它的原形是:
GetPrivateProfileString(
LPCTSTR lpAppName, // 指向包含 Section 名稱的字符串地址
LPCTSTR lpKeyName, // 指向包含 Key 名稱的字符串地址
LPCTSTR lpDefault, // 如果 Key 值沒有找到,則返回缺省的字符串的地址
LPTSTR lpReturnedString, // 返回字符串的緩衝區地址
DWORD nSize // 緩衝區的長度
LPCTSTR lpFileName // ini 文件的文件名
);
GetPrivateProfileSection - 從 ini 文件中讀出整個 Section 的內容,它的原形是:
GetPrivateProfileSection(
LPCTSTR lpAppName, // 指向包含 Section 名稱的字符串地址
LPTSTR lpReturnedString, // 返回數據的緩衝區地址
DWORD nSize // 返回數據的緩衝區長度
LPCTSTR lpFileName // ini 文件的文件名
);
這個 api 可以讀出整個 section 的內容,當你不知道 section 中有哪些 key 的時候,可以使用這個 api 將整個 section 讀出後再處理。
GetPrivateProfileSectionNames - 從 ini 文件中獲得 Section 的名稱,它的原形是:
GetPrivateProfileSectionNames(
LPTSTR lpszReturnBuffer, // 返回數據的緩衝區地址
DWORD nSize // 返回數據的緩衝區長度
LPCTSTR lpFileName // ini 文件的文件名
);
如果 ini 中有兩個 Section: [sec1] 和 [sec2],則返回的是 'sec1',0,'sec2',0,0 ,當你不知道 ini 中有哪些 section 的時候可以用這個 api 來獲取名稱
WritePrivateProfileSection - 將一個整個 Section 的內容入 ini 文件的指定 Section 中,它的原形是:
WritePrivateProfileSection(
LPCTSTR lpAppName, // 指向包含 Section 名稱的字符串地址
LPCTSTR lpString // 要寫入的數據的地址
LPCTSTR lpFileName // ini 文件的文件名
);
WritePrivateProfileString - 將一個 Key 值寫入 ini 文件的指定 Section 中,它的原形是:
WritePrivateProfileString(
LPCTSTR lpAppName, // 指向包含 Section 名稱的字符串地址
LPCTSTR lpKeyName, // 指向包含 Key 名稱的字符串地址
LPCTSTR lpString // 要寫的字符串地址
LPCTSTR lpFileName // ini 文件的文件名
);
如果 ini 中沒有指定的 Section,API 會新建 Section,如果沒有指定的 Key 則新建一個 Key 並寫入數據,如果已經存在,則用字符串代替原來的值。當指定的 ini 也不存在的時候,API 會自動建立一個新的文件,所以使用 ini 的好處是我們不必爲了保存少量的數據涉及到文件操作,就連查找文件是否存在的操作都不必要。
使用要點:
在我們實際使用的時候,用的最多的是 GetPrivateProfileString 和 WritePrivateProfileString,但在對自定義 ini 文件操作的時候要注意的是,如果 lpFileName 指定的文件沒有路徑的話,Api 會去 Windows 的安裝目錄去找而不會在當前目錄找,但是每次用到 ini 函數要獲取當前路徑顯然太麻煩了,這裏有一個變通的辦法,你只要在 ini 文件名前面加上 ./ 就可以了,比如說要對本目錄下的 user.ini 操作,那麼文件名就是 './user.ini'
這樣顯然比較方便。另外,當你要把一個 Key 清除的時候,可以使用把 lpString 指向一個空的字符串然後使用 WritePrivateProfileString。當你要把一個 section 的全部內容清空的時候,也不必把 key 一個個的清除,可以使用把 lpString 指向一個空的字符串然後使用 WritePrivateProfileSection。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Desktop.ini文件作用:
Desktop.ini以隱藏形式存在與文件夾中,若沒有可以用文本文件創建。它可以起到自定義文件夾顯示方式的作用。
1.自定義文件夾圖標
在Desktop.ini文件中添加如下語句即可,
[.ShellClassInfo]
IconFile=[可以是.dll,.exe,.ico文件]
IconIndex=[>=0的數字,圖標在IconFile中的序號]
2.鼠標懸停在文件夾圖標上時,自定義提示文字
添加語句
InfoTip=[要顯示的文字]
類似圖片的alt和鏈接的title
3.給文件夾添加背景圖片
添加語句
[ExtShellFolderViews]
[{BE098140-A513-11D0-A3A4-00C04FD706EC}]
IconArea_Image=[jpg,bmp格式的圖片文件]
示例:
[{5984FFE0-28D4-11CF-AE66-08002B2E1262}]
PersistMonikerPreview=%WebDir%/classic.bmp
PersistMoniker=file://Folder Settings/Folder.htt
[ExtShellFolderViews]
{5984FFE0-28D4-11CF-AE66-08002B2E1262}={5984FFE0-28D4-11CF-AE66-08002B2E1262}
{BE098140-A513-11D0-A3A4-00C04FD706EC}={BE098140-A513-11D0-A3A4-00C04FD706EC}
[.ShellClassInfo]
ConfirmFileOp=0
[{BE098140-A513-11D0-A3A4-00C04FD706EC}]
Attributes=1
IconArea_Image=Folder Settings/Background.jpg
IconArea_Text=0x00ff004f
IconArea_TextBackground=0x00FFFFff