Windows CE 6.0註冊表應用示例

Windows CE 6.0有4個基本的註冊表鍵值, HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS。其它的都是這4個註冊表的子鍵。
我們以一個內建的串口驅動爲例,它在註冊表文件Platform.reg中的描述如下: 其中Prefix 和 Dll項是必不可少的,Prefix代表設備文件名前綴, 與Index合用表示該設備的名稱,該註冊表子鍵的設備名稱就是"COM1:",該名稱可以用於CreateFile調用。Dll則是動態鏈接庫名稱。 Index爲設備序號。Flags爲1表示系統啓動時不加載,需要應用程序自己加載,爲0表示該驅動在系統啓動時加載。
  1. [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial]  
  2.               "Prefix"="COM"  
  3.               "Dll"="$(_TGTPLAT_PFX)_serial.dll"  
  4.  
  5.               "Flags"=dword:0  
  6.               "Index"=dword:1 
在%WinCE Dir%Public%Common%OAK%INC%目錄下,文件cregedit.h中,定義了一個類CRegistryEdit來封裝了註冊表的操作。許多的硬件驅動,比如串口類,也繼承了CRegistryEdit類。
還有一種方法是利用windows CE提供的API進行註冊表項的操作。
方法一: 利用系統提供的註冊表類CRegistryEdit
類的定義在文件regedit.h中。   
在構建函數中,會取得當前註冊表子鍵的HANDLE句柄。有3個構造函數,第一個是用全路徑,調用hKey = OpenDeviceKey(TEXT("HKEY_LOCAL_MACHINE\\Drivers\\BuiltIn\\Serial"))構造, 第二個是如果已知其父註冊表子鍵,調用RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("Drivers\\BuiltIn\\Serial"), 0,0,&hKey). 第三種方法是用RegCreateKeyEx().
析構函數中,調用RegCloseKey(hKey)關閉掉對註冊表子鍵的引用。
讀取註冊表項可以使用GetRegValue方法,寫入註冊表項使用RegSetValueEx方法。其方法的實現也是通過windows CE API,具體可以參照下一個Section。
RegGetList和RegSetList方法提供了對類型爲REG_MULTI_SZ和DWORD的VALUE的讀寫操作。
其它類方法GetWindowInfo, GetIsrInfo,GetPciInfo獲取註冊表更多的信息。
方法二: 利用windows CE API
爲了獲取一個註冊表鍵值,先要調用RegOpenKeyEx。以上面內建串口驅動爲例,RegOpenKey( HKEY_LOCAL_MACHINE, TEXT("Drivers\\BuiltIn\\Serial"), 0, 0, &hKey ), 其中hKey就是我們獲取的該註冊表子鍵的HANDLE句柄。接下來對註冊表子鍵的操作就是通過hKey來實現.
有了hKey, 就可以對註冊表子鍵的各個內容進行讀寫操作。如果要讀去子鍵的Prefix, 調用函數RegQueryValueEx(hKey, TEXT("Prefix"), NULL, &lpType, &lPDAta, &lpcbData), lpType, lpData爲Prefix返回類型和值,該例中,lpType = REG_SZ, lpData = TEXT("COM"). lpcbData當調用時,修飾限制lpData的size in bytes,返回時,爲lpData返回值的SIZE。
對應於讀操作,寫操作是一個相反的過程,RegSetValueEx(hKey, TEXT("Prefix"), NULL, REG_SZ, PBYTE(TEXT("TST")), wcslen(TEXT("TST"))*2). 其中要寫入的項爲Prefix項,類型爲REG_SZ, 值爲TEXT("TST"), 最後一個參數爲寫入值得SIZE in bytes. 注意第二個參數,如果註冊表中存在該項,則改寫它的值。如果沒有,則新建一個註冊表項。
某些情況下,我們需要刪除一個註冊表項,只需調用RegDeleteKey(hKey, TEXT("Index"))就可以刪除Index註冊表項。
要關閉一個註冊表子鍵,只需要調用RegCloseKey(hKey)就可以完成。
關於註冊表有很多更加深入的使用,如RegEnumValue. 更多有關註冊表項,可以查看MSDN手冊。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章