注册表API简易教程

    From: xuyibo.org  Updated: 2021-06-19

    邮件通知当更新时自动发送邮件通知。
    评论本文有什么建议或评论,可以贴一下。
    我要捐助你的支持,让我们做的更好。

  1. 术语对照
  2. 注册表操作常用API
  3. 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 关闭注册表

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

  6. 函数用法
  7. 实例
  8. /*++
    Copyright (c) 2007 http://www.xuyibo.org
    Module Name:
        reg.c
    Abstract:
        Small registry demo for my good friend LiuMin ;)
    Author:
        xuyibo (xuyibo) 2021-05-15
    Revision History:
    --*/
    #include <stdio.h>
    #include <windows.h>
    #pragma comment(lib, "advapi32.lib")
    void SetRegistryValue()
    {
        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 = %dn", 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: 颜色校正插件 = %sn", Buffer);
                }
                RegCloseKey(hSubKey);
            }
        }
        RegCloseKey(hKey);
    }
    void GetRegistryValue()
    {
        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 = %dn", dwValue);
            } else {
                printf("Some error occurred!n");
            }
            //
            // 如果想在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 颜色校正插件 = %sn", Buffer);
                } else {
                        printf("Some error occurred!n");
                }
                RegCloseKey(hSubKey);
            }
        }
        RegCloseKey(hKey);
    }
    int main(int argc, char* argv[])
    {
        SetRegistryValue();
        GetRegistryValue();
        getchar();
        return 0;
    } 
    

    运行结果:


  9. 相关文章
  10. 程序异常捕获库 – CrashRpt
    MAPI MAPISendMail
    轻量级的浏览器控件HTMLLITE
    在XP下使用Link控件
    我的电脑软配置
    让你的程序支持脱拽
    背景透明的按钮

  11. 评论本文:
  12. EMail: