inf 與 ini 文件的配置與C++讀取

INF是Device INFormation File的英文縮寫,是Microsoft公司爲硬件設備製造商發佈其驅動程序推出的一種文件格式,INF文件中包含硬件設備的信息或腳本以控制硬件操作。
 
INFI的功能
 
1 複製文件、刪除文件、或重新命名文件。
2 新增或刪除註冊表(Registry)中的項目。
3 修改重要的系統設置文件(如 Autoexec.bat、Config.sys、.INI 等)
 
INF的規則
 
INF是純文本文件,它是分節的,這點和INI文件類似,每節以"[]"擴起來,每一個節名最長爲255個字符(Windows 2000/XP/2003操作系統中)或28個字符(Windows 98操作系統中)。在節與節之間的內容叫條目,每一個節又是由許多的條目組成的,每一個條目都由=分開,如a="b"。如果每一個條目的等號後有多個值,則每一個值之間用","號分隔開。INF對大小寫不敏感,行註釋語句命令是";",類似VB裏的'。如果一行寫不下,使用"/"來換行。
 
INF的運行
 
.INF文件是由Windows的SetupAPI解釋執行的腳本文件,它的運行過程很簡單,是一種線性的執行,線性的意思就是.INF文件的運行過程不存在分支語句,也就是沒有條件語句,一旦開始執行,就是沿着固定的路線運行。它的運行是按照節爲單位來執行的,從某一個[Install]節開始執行,從上到下執行該節中的條目,如果該條目是一個節,那麼就一條條執行子節中的條目,如此遞歸執行。在WINDOW上運行只要右擊這個文件,點擊安裝即可。
 

INF的語法結構
 
;指定版本和簽名節
[VERSION]
;系統根據Signuture看是不是適合當前版本,如果適合的話就執行,否則不執行,當然強制安裝是可以的
;用於WIN9X
Signature="$CHICAGO$"
;WINNT+
;Signature="$Windows NT$"
 
;指定安裝文件佈局
該行是可選的,如果沒有提供佈局信息文件,則在INF文件內必須包含[SourceDisksNames]和[SourceDisksFiles]節
LayoutFile=filename.inf
 
[SourceDisksNames]節 
[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"
 
[Install]
提供了一個INF文件安裝過程的總覽,它識別文件內其他包含安裝信息節的詳細動作,是Windows內建安裝函數識別安裝過程和內容的真正入口[Install]
 
;[Install]節分[DefaultInstall]和[OtherInstall]兩類
;[DefaultInstall]節節名DefaultInstall如前面表格內容所述被顯式地在註冊表中指定。
;該節也是系統獲取INF文件中安裝信息的首要入口,當用戶右擊INF文件選“安裝”時該節內容被執行。
;[OtherInstall]與[DefaultInstall]節遵循相同的語法,但必須被顯式地調用,常被用來定義反安裝動作
 

;缺省安裝節
[DefaultInstall]
 
;指明添加註冊表的子節,等號後面的爲自定義節名,例子見[add]節
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文件段]
;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"
 
;更新ini文件值內容
updateinifield =
 
;ini文件更新註冊表
ini2reg=aa.ini
 
;更新config.sys內容
updatecfgsys=更新autoexec.bat段
 
[更新autoexec.bat段]
 
;更新autoexec.bat內容
updateautobat=更新autoexec.bat段
[更新autoexec.bat段]
 

;定義資源節,像資源文件,調用時使用%REG_SZ%就代表了0x00000000
[Strings]
REG_SZ=0x00000000
REG_BINARY=0x00000001
REG_DWORD=0x00010001
 
 
 
;自定義添加註冊表項的節
[add]
 
;注意格式:HKEY(根鍵縮寫),Subkey(子鍵),Valuename(鍵值名),Type(鍵值類型),Value(鍵值)
;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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章