虚位以待(AD)
虚位以待(AD)
首页 > 操作系统 > Windows系列 > 注册表API简易教程

注册表API简易教程
类别:Windows系列   作者:码皇   来源:互联网   点击:

 术语对照注册表操作常用API API 说明 RegCreateKey 创建一个KEY,并返回相应的HKEY RegOpenKey 打开注册表,得到一个HKEY,用来作为下面这些函数的第一个参数。 RegOpenKeyEx 同RegOpenKey类似,一般很少用,增加了一个访问

 

术语对照



注册表操作常用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,
"Softwaredaheng_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, "Softwaredaheng_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,
"Softwaredaheng_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);
        }

        //
        // 如果想在Softwaredaheng_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, "Softwaredaheng_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!");
        }

        //
        // 如果想在Softwaredaheng_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简易教程