注册表编程扫盲(三)

来源:互联网 发布:mac os系统更新 编辑:程序博客网 时间:2024/06/05 10:20
三。RegQueryValueEx和RegEnumValue
    以上都是在说如何写注册表,不过很多情况下都要读注册表的。啊,来看一下有哪几个API,1,2,...怎么又这么多?算了,就说两个吧,应该够用了的。还是先说一下RegQueryValueEx吧,这回看不出什么意思了,Query是什么意思呢?别急,我先查一下字典,Query,Query,查到了,字典说是"怀疑"的意思,好象解释不通啊。唉,还是不要查了,早知道就装金山快译了。不说废话了,还是直说用法算了。这个函数就是说已知一个数据项的名字,然后去访问它的值,来看看声明:
LONG RegQueryValueEx(
  HKEY hKey,           
  LPTSTR lpValueName,
  LPDWORD lpReserved, 
  LPDWORD lpType,
  LPBYTE lpData, 
  LPDWORD lpcbData 
);
hKey和lpValueName不说了,和RegSetValueEx的前两个参数意思是一样的,不明白的话,看上一章可以了:)

lpReserved:真是受不了啊!又是一个没用的参数,必须是NULL.

lpType,lpData,lpcbData:和RegSetValueEx的后面3个参数意思差不多的,只不过lpType和lpcbData要取地址。不多说了。不懂直接问我算了。

返回值?不用说,还是同上。
好了好了,说到哪里了?哦,该说RegEnumValue了,这个意思我懂,Enum就是枚举的意思,那这个函数就是枚举一个键下的所有值了。好了,开门见山,我就直说它怎么用了。
LONG RegEnumValue(
  HKEY hKey,             
  DWORD dwIndex,         
  LPTSTR lpValueName,    
  LPDWORD lpcbValueName, 
  LPDWORD lpReserved,     
  LPDWORD lpType,  
  LPBYTE lpData,   
  LPDWORD lpcbData 
);
有没搞错,又是这么多参数,受不了MS了。唉,没办法,还是一个一个的看吧。
hKey:不说了,同上。

dwIndex:就是索引号了从0开始的,0,1,2....一直下去,就可以找出所有的值了。

lpValueName:找到一个值后,它的名字就保存在这里了。显然是一个字符串。

lpcbValueName:就是lpValueName的长度了,别忘了取地址。

lpReserved:又一个保留的,NULL。

lpType:和RegSetValueEx的dwType差不多,不过这个要取地址,它告诉你这个值是什么类型的。

lpData,lpcbData,返回值:累死我了,不说了,同上。
好象说得不太清楚,不要怪我,不懂可以问我了。恩,还是举个例吧,实例最能说明问题(记不得谁说的了):
for (int i = 0;dwRes==0;i++) 
{
DWORD cbV=32,cbD=32;
BYTE szData[32];
char szValue[32];
dwRes = RegEnumValue(hk, i, szValue,&cbV, NULL, NULL,szData,&cbD); 
        ......//自己写

这一章就写到这里吧。

四。RegDeleteValue和RegDeleteKey
    太简单了,懒得说了,但为了对得起大家,还是说一下吧:
LONG RegDeleteKey(HKEY hKey,LPCTSTR lpSubKey);
LONG RegDeleteValue(HKEY hKey,LPCTSTR lpValueName);
就这么简单,一个删除键,一个删除值。不用我说了吧。

后记。
    不知不觉写了这么多,看一下表,哎哟,11点了,赶快睡觉。水平有限,写错了大家不要笑啊。<^_^>
等一下,我看写了多少个API:1,2,3...8个,不是很多,不当之处,高手指点一下啊。



原创粉丝点击