Windows CE 6.0注册表应用示例

开发
本文向您介绍Windows CE 6.0注册表的一些应用,包括利用系统提供的注册表类CRegistryEdit以及利用windows CE API等方法。

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手册。

 

【编辑推荐】

  1. Windows CE在嵌入式工业中的应用思考
  2. Windows CE下驱动开发基础
  3. Windows CE异常和中断服务程序初探
  4. Windows CE OAL层的结构与开发
  5. Windows CE中实现蓝牙串口驱动程序
责任编辑:佚名 来源: 网络学院
相关推荐

2011-04-21 09:10:16

2011-08-01 16:52:42

Windows CE 嵌入式

2017-08-09 16:24:46

2011-08-04 16:37:09

注册表编辑器注册表

2009-02-18 08:42:40

手动备份注册表

2010-03-29 09:46:29

Windows 7关机加速

2011-08-03 18:01:40

注册表

2011-06-03 10:34:32

2009-05-28 14:11:05

Windows Emb

2011-09-15 10:36:49

注册表windows7系统盘

2010-04-21 14:33:05

Windows注册表

2011-06-03 10:34:22

arpWindows 200

2009-07-16 15:13:17

Windows Emb

2018-11-02 09:15:11

WindowsWindows 10注册表

2009-08-21 09:43:49

C#编辑注册表

2010-03-12 15:28:26

Windows Emb

2011-08-04 16:04:09

注册表

2019-07-07 09:20:02

Windows 10Windows备份注册表

2009-06-15 09:56:22

2009-09-24 09:45:07

Windows Emb
点赞
收藏

51CTO技术栈公众号