好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

注册表API简易教程 - Windows操作系统 - 自学php

 

术语对照

注册表操作常用API API 说明 RegCreateKey 创建一个KEY,并返回相应的HKEY RegOpenKey 打开注册表,得到一个HKEY,用来作为下面这些函数的第一个参数。 RegOpenKeyEx 同RegOpenKey类似,一般很少用,增加了一个访问控制类型参数。 RegSetValue 设置一个HKEY的默认值 RegSetValueEx 设置一个HKEY除默认值以外其它的值 RegQueryValue 获取一个HKEY的默认值 RegQueryValueEx 获取一个HKEY除默认值以外其它的值 RegDeleteKey 删除一个KEY,此KEY不能包含子KEY SHDeleteKey 删除一个KEY以及所有子KEY RegDeleteValue 删除KEY里面的值 RegCloseKey 关闭注册表

注册表数据类型 类型 说明 REG_DWORD 32位数字 REG_SZ 以NULL结尾的字符串,它可以为Unicode或ANSI字符串,取决于是否使用的是Unicode还是ANSI函数。

函数用法

RegCreateKey

LONG RegCreateKey(   HKEY hKey,        // handle to an open key   LPCTSTR lpSubKey, // subkey name   PHKEY phkResult   // buffer for key handle );

假如我们要将demo程序的许多相机参数保存到:HKEY_LOCAL_MACHINESOFTWAREdaheng_directx,使用这个函数来创建指定的key,得到对于的HKEY以便进一步操作。

HKEY hKey; if (RegCreateKey(HKEY_LOCAL_MACHINE, "Software\daheng_directx", &hKey) == ERROR_SUCCESS) { // 在这里就可以使用hKey来操作daheng_directx这个KEY里面的值了。 } RegCloseKey(hKey);

注意:一般程序经常保持数据的位置有:HKEY_LOCAL_MACHINESOFTWARE和HKEY_CURRENT_USERSoftware,两者的区别为:前者保持的数据,操作 系统 上的所有账户都可以访问(比如你的机器上有两个账户,一个是徐艺波,一个是康康,假如你将注册表保存在HKEY_LOCAL_MACHINESOFTWARE,那么当系统以徐艺波的账户登录加入后,运行demo和进入康康运行demo,获取的初始值都是一样的。),而HKEY_CURRENT_USERSoftwar是针对当前账户的,系统以不同的账户登录,这个KEY下面的值是不一样的。

RegOpenKey

LONG RegOpenKey(   HKEY hKey,        // handle to open key   LPCTSTR lpSubKey, // name of subkey to open   PHKEY phkResult   // handle to open key );

这个函数不同于RegCreateKey的地方在于,如果这个KEY不存在,那么此函数执行失败(而RegCreateKey:存在的话,返回存在的HKEY;不存在,创建一个并返回其HKEY)。 假如我们要将demo程序的许多相机参数保存到:HKEY_LOCAL_MACHINESOFTWAREdaheng_directx,使用这个函数来打开指定的key,得到对于的HKEY以便进一步操作。

HKEY hKey; if (RegOpenKey(HKEY_LOCAL_MACHINE, "Software\daheng_directx", &hKey) == ERROR_SUCCESS) { // 在这里就可以使用hKey来操作daheng_directx这个KEY里面的值了。 } RegCloseKey(hKey);

RegSetValueEx

LONG RegSetValueEx(   HKEY hKey,           // handle to key   LPCTSTR lpValueName, // value name   DWORD Reserved,      // reserved   DWORD dwType,        // value type   CONST BYTE *lpData,  // value data   DWORD cbData         // size of value data );

假设我们要保持相机曝光数据到HKEY_LOCAL_MACHINESOFTWAREdaheng_directx,数据名为AEC,值为1:

HKEY hKey;     HKEY hSubKey;     DWORD dwValue = 1;     char Buffer[] = "raw2rgb.dll";         // 使用RegCreateKey能保证如果Softwaredaheng_directx不存在的话,创建一个。     if (RegCreateKey(HKEY_LOCAL_MACHINE, "Software\daheng_directx", &hKey) == ERROR_SUCCESS) {         //         // 在这里就可以使用hKey来操作daheng_directx这个KEY里面的值了。         //

        if (RegSetValueEx(hKey, "AEC", 0, REG_DWORD, (CONST BYTE*)&dwValue, sizeof(DWORD)) == ERROR_SUCCESS) {             printf("RegSetValueEx: AEC = %d ", dwValue);         }

        //         // 如果想在Software\daheng_directx创建一个plugins key, 那么就不能再使用hKey了,需要         // 重新获取这个结点的HKEY。         //                 if (RegCreateKey(hKey, "plugins", &hSubKey) == ERROR_SUCCESS)  {  if (RegSetValueEx(hSubKey, "颜色校正插件", 0, REG_SZ, (CONST BYTE*)Buffer,strlen(Buffer) + 1) == ERROR_SUCCESS) { printf("RegSetValueEx: 颜色校正插件 = %s ", Buffer);             }             RegCloseKey(hSubKey);         }     }     RegCloseKey(hKey);

RegQueryValueEx

LONG RegQueryValueEx(   HKEY hKey,            // handle to key   LPCTSTR lpValueName,  // value name   LPDWORD lpReserved,   // reserved   LPDWORD lpType,       // type buffer   LPBYTE lpData,        // data buffer   LPDWORD lpcbData      // size of data buffer );

假设我们要读取上面设置RegSetValueEx设置的值:

 HKEY hKey;     HKEY hSubKey;     DWORD dwType;     DWORD dwValue;     DWORD dwSize;     // 使用RegCreateKey能保证如果Softwaredaheng_directx不存在的话, 创建一个。     if (RegOpenKey(HKEY_LOCAL_MACHINE, "Software\daheng_directx",  &hKey) == ERROR_SUCCESS) {         //         // 在这里就可以使用hKey来操作daheng_directx这个KEY里面的值了。         //

        dwType = REG_DWORD;         dwSize = sizeof(DWORD);         if (RegQueryValueEx(hKey, "AEC",  0, &dwType, &dwValue, &dwSize) == ERROR_SUCCESS) {             printf("RegQueryValueEx AEC = %d ", dwValue);         } else {             printf("Some error occurred! ");         }

        //         // 如果想在Software\daheng_directx创建一个plugins key, 那么就不能再使用hKey了,需要         // 重新获取这个结点的HKEY。         //

        if (RegOpenKey(hKey, "plugins", &hSubKey) == ERROR_SUCCESS) {             char Buffer[256];             dwType = REG_SZ;             dwSize = sizeof(Buffer);             if (RegQueryValueEx(hSubKey, "颜色校正插件", 0, &dwType, (LPBYTE)Buffer, &dwSize) == ERROR_SUCCESS) { printf("RegQueryValueEx 颜色校正插件 = %s ", Buffer);    

查看更多关于注册表API简易教程 - Windows操作系统 - 自学php的详细内容...

  阅读:49次