欢迎来到天天文库
浏览记录
ID:6076652
大小:30.71 KB
页数:20页
时间:2018-01-02
《windows关于注册表编程reg》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、读写windows注册表Windows注册表是Windows的灵魂,它不仅保存了windows运行时所有配置信息,而且包括所有应用程序的运行环境。下面我们通过一个实例来展示一下如何利用windows提供的api来操作注册表。注册表函数对注册表的操作是通过句柄来完成的,与文件操作一样,在对某个键下的子键或者键值项进行操作之前,需要先将这个键打开,然后使用键句柄来引用这个键,在操作完毕以后再将键句柄关闭。注册表的根键不需要打开,它们的句柄是固定不变的,要使用根键的时候只要把这些句柄直接拿来用就是了,在WinReg.h已经定义了这些句柄值,下面是常用的:#defineHKEY_CLASSES_R
2、OOT ((HKEY)(ULONG_PTR)((LONG)0x80000000))#defineHKEY_CURRENT_USER ((HKEY)(ULONG_PTR)((LONG)0x80000001))#defineHKEY_LOCAL_MACHINE ((HKEY)(ULONG_PTR)((LONG)0x80000002))#defineHKEY_USERS ((HKEY)(ULONG_PTR)((LONG)0x80000003))#defineHKEY_CURRENT_CONFIG ((H
3、KEY)(ULONG_PTR)((LONG)0x80000005))在程序中可以随时将这些助记符当做句柄来引用对应的根键。在程序结束的时候,不需要关闭这些根键句柄。打开子键使用RegOpenKeyEx函数,在Win16中还存在一个RegOpenKey函数,虽然在Win32中这个函数仍然存在,但这仅是为了兼容的目的而设置的。API手册中推荐使用RegOpenKeyEx函数:LONGRegOpenKeyEx(HKEYhKey, LPCWSTRlpSubKey, DWORDulOptions, REGSAMsamDes
4、ired, PHKEYphkResult);函数的hKey参数指定父键句柄,lpSubKey指向一个字符串,用来表示要打开的子键名称,在系统中一个子键的全称是以“根键第1层子键第2层子键第n层子键”类型的字符串表示的,中间用“”隔开,字符串的最后以0字符结束,这和目录名的表示方法是很像的。既然子键的全称是这样表示的,那么要打开一个子键的时候,下面的两种表示方法有什么不同呢?(1)父键=HKEY_LOCAL_MACHINE,子键=SoftwareRegTestMySubkey(2)父键=HKEY_LOCAL_MACHINESoftware,子键=Reg
5、TestMySubkey答案是:这两种表示方法是完全相同的。在使用RegOpenKeyEx函数打开子键的时候,既可以将hKey参数设置为HKEY_LOCAL_MACHINE根键的句柄,并将lpSubKey参数指向“SoftwareRegTestMySubkey”字符串;也可以将hKey参数设置为“HKEY_LOCAL_MACHINESoftware”的句柄,将lpSubKey参数指向“RegTestMySubkey”字符串,得到的结果是一样的。但是,使用第一种方法时,hKey参数可以直接使用助记符HKEY_LOCAL_MACHINE来表示,因为根键的句柄是固定的,不需要打开;而使
6、用第二种方法时,还需要先打开“HKEY_LOCAL_MACHINESoftware”键来获取它的句柄,所以具体使用哪种方法还要根据具体情况灵活选用。函数的其他几个参数的含义如下。● ulOptions参数——系统保留参数,必须指定为0。● samDesired参数——子键的打开方式,根据使用子键的方式,可以设置为下列取值的组合,只有指定了打开的方式,才能在打开子键后进行相应的操作:■ KEY_ALL_ACCESS——允许所有的存取。■ KEY_CREATE_LINK——允许建立符号列表。■ KEY_CREATE_SUB_KEY——允许建立下一层子键。■ KEY_ENUMERA
7、TE_SUB_KEYS——允许枚举下一层子键。■ KEY_EXECUTE——允许读操作。■ KEY_QUERY_VALUE——允许查询键值数据。■ KEY_READ—KEY_QUERY_VALUE,KEY_ENUMERATE_SUB_KEYS和KEY_NOTIFY的组合。■ KEY_SET_VALUE——允许修改或创建键值数据。■ KEY_WRITE——KEY_SET_VALUE和KEY_CREATE_SUB_
此文档下载收益归作者所有