zoukankan      html  css  js  c++  java
  • API---注册表编程

    首先来认识一下键,项,值吧:

    左边有五个根键

    HKEY_CLASSES_ROOT

    HKEY_CURRENT_USER

    HKEY_LOCAL_MACHINE

    HKEY_USER

    HKEY_CURRENT_CONFIG

    根键展开后可以看到子健:像 "SOFTWARE, Microsoft, Windows, CurrentVersion 等都是子健。

    而最后一级便不是子健了,而是项:Run。

    “名称栏” 下方的都称为 键值项

    “类型栏” 下方的都称为 键值项的类型

    “数据栏” 下方的都称为 键值项的键值

     

    RegCreateKeyEx() 介绍:

    功能:创建或打开注册表键。

     函数原型:LONG RegCreateKeyEx(
                  HKEY hKey,        // 键的句柄 (RegCreateKey, RegCreateKey() 的返回值) 或者 预定义的值( 即五个根键)。
                  LPCTSTR lpSubKey,   // 指向 要创建或要打开的子健名称。
                  DWORD Reserved,     // 保留值必须为 0,
                  LPTSTR lpClass,     // 指向一个字符串,该字符串定义了该键的类型。可以为空。
                  DWORD dwOptions,  //  新创建的键的属性。
                  REGSAM samDesired,   // 键的访问权限。
                  LPSECURITY_ATTRIBUTES lpSecurityAttributes,   // 指向 SECURITY_ATTRIBUTES 结构的指针。

                                                                          // 定义返回的句柄是否可以被子进程继承,为 NULL 表示不继承。
                  PHKEY phkResult,                 // 指向新创建或打开的键的句柄的指针,保存返回的句柄。
                  LPDWORD lpdwDisposition  //  指明键是被创建还是被打开的
                  ); 

    (入参,即输入的参数。出参,即输出的参数)

    参数:dwOptions

        REG_OPTION_NON_VOLATILE 新创建的键为一个非短暂性的键 (数据信息保存在文件中,当系统重新启动时,数据信息恢复)
        REG_OPTION_VOLATILE 新创建的键为一个短暂性的键(数据信息保存在内存中)。
        REG_OPTION_BACKUP_RESTORE 仅在WINNT中支持,可以提供优先级支持。

    参数:samDesired

           KEY_CREATE_LINK 准许生成符号键
      KEY_CREATE_SUB_KEY 准许生成子键
      KEY_ENUMERATE_SUB_KEYS 准许生成枚举子键
      KEY_EXECUTE 准许进行读操作
      KEY_NOTIFY 准许更换通告
      KEY_QUERY_VALUE 准许查询子键
      KEY_ALL_ACCESS 提供完全访问,是上面数值的组合
      KEY_READ 是下面数值的组合:
      KEY_QUERY_VALUE、KEY_ENUMERATE_SUB_KEYS、KEY_NOTIFY
      KEY_SET_VALUE 准许设置子键的数值
      KEY_WRITE 是下面数值的组合:
      KEY_SET_VALUE、KEY_CREATE_SUB_KEY

    参数:lpdwDisposition (出参)

           REG_CREATED_NEW_KEY 键先前不存在,现在被创建。
      REG_OPENED_EXISTING_KEY 键先前已存在,现在被打开。

    返回值:如果函数调用成功,则返回 ERROR_SUCCESS。否则返回非零的错误代码。

    RegOpenKeyEx() 介绍:

    功能:打开一个已经存在的子健。

    函数原型:LSTATUS RegOpenKeyEx(
                      HKEY   hKey,
                      LPCSTR lpSubKey,
                      DWORD  ulOptions,   // 保留值必须为 0。
                      REGSAM samDesired,
                      PHKEY  phkResult
                      );

    参数:同 RegCreateKeyEx()。

    返回值:如果函数调用成功,则返回 ERROR_SUCCESS。否则返回非零的错误代码。

    RegCloseKey() 介绍:
    功能:关闭注册表。

    函数原型:LONG RegCloseKey(

                      HKEY hKey // 释放键的句柄。
                      );
    返回值:如果函数调用成功,则返回 ERROR_SUCCESS。否则返回非零的错误代码。
     
    RegDeleteKey() 介绍:
    功能:删除注册表键值。(不能删除含有子健的子健)
    函数原型:LSTATUS RegDeleteKey(
                      HKEY   hKey,
                      LPCSTR lpSubKey,
                      REGSAM samDesired,
                      DWORD  Reserved   // 保留值必须为 0。
                      );
    返回值:如果函数调用成功,则返回 ERROR_SUCCESS。否则返回非零的错误代码。
     
    RegQueryValueEx() 介绍:
    功能:检索一个已打开的注册表句柄中,指定的注册表键的类型和设置值。
    函数原型:LSTATUS RegQueryValueExA(
                      HKEY  hKey,  // 已打开项的句柄,或者指定一个标准项名。
                      LPCSTR  lpValueName,  // 要查询注册表键值的名字字符串,注册表键的名字,以空字符结束。
                      LPDWORD  lpReserved,  // 保留值必须为 0。
                      LPDWORD  lpType,  //用于装载取回数据类型的一个指针变量。
                      LPBYTE  lpData,  //用于装载指定值的一个缓冲区,可以为空。
                      LPDWORD  lpcbData  //用于装载 lpData 缓冲区长度的一个变量。一旦返回,它会设为实际装载到缓冲区的字节数。
                                                        // 若 lpData 为 NULL, 则也为 NULL。
                      );
    参数:lpType为一个指向数据类型的指针,数据类型为下列类型之一:
      REG_BINARY 二进制数据
      REG_DWORD 32位整数
      REG_DWORD_LITTLE_ENDIAN little-endian格式的数据,例如0X12345678以(0X78 0X56 0X34 0X12)方式保存
      REG_DWORD_BIG_ENDIAN big-endian格式的数据,例如0X12345678以(0X12 0X34 0X56 0X78)方式保存
      REG_EXPAND_SZ 一个包含未扩展环境变量的字符串
      REG_LINK 一个Unicode类型的链接
      REG_MULIT_SZ 以两个零结尾的字符串
      REG_NONE 无类型数值
      REG_RESOURCE_LIST 设备驱动资源列表
      REG_SZ 一个以零结尾的字符串根据函数使用的字符集类型的不同而设置为Unicode或ANSI类型的字符串。
    返回值:如果函数调用成功,则返回 ERROR_SUCCESS。否则返回非零的错误代码。
     
    RegSetValueEx() 介绍:
    功能:在注册表项下设置指定值的数据和类型。
    函数原型:LONG RegSetValueEx(
                 HKEY hKey,
                 LPCTSTR lpValueName,
                 DWORD Reserved,// 保留值必须为0。
                 DWORD dwType,
                 CONST BYTE *lpData,
                 DWORD cbData
                   );
    参数:同 RegQueryValueEx()。
    返回值:如果函数调用成功,则返回 ERROR_SUCCESS。否则返回非零的错误代码。
     
    RegDeleteValue() 介绍:
    功能:删除指定项下方的一个值。
    函数原型:LSTATUS RegDeleteValue(
                      HKEY   hKey,
                      LPCSTR lpValueName  // 指向要删除的值名。
                      );
    返回值:如果函数调用成功,则返回 ERROR_SUCCESS。否则返回非零的错误代码。
     
    DEMO CODE:(注意:能修改成功的注册表一般都在 HKEY_CURRENT_USER 这个根键里)
    #include<stdio.h>
    #include<Windows.h>
    int main(void)
    {
        LONG Long, Long0;
        HKEY hKey = NULL;
        char Buffer[] = "www.baidu.com";
        Long = RegOpenKeyEx(HKEY_CURRENT_USER,
            "SOFTWARE\Microsoft\Internet Explorer\Main",
            0,
            KEY_ALL_ACCESS,
            &hKey);
        if (Long != ERROR_SUCCESS)
        {
            printf("Open Error!
    ");
            system("pause");
            exit(0);
        }
    
        Long0 = RegSetValueEx(hKey,
            "Start Page",
            0,
            REG_SZ,
            (CONST BYTE *)Buffer,
            strlen(Buffer));
    
        if (Long0 != ERROR_SUCCESS)
        {
            printf("Set Value Error!
    ");
            system("pause");
            exit(0);
        }
    
        printf("Modify Succeed!
    ");
        system("pause");
        return 0;
    }
     
  • 相关阅读:
    Python之路-(js正则表达式、前端页面的模板套用、Django基础)
    Python之路-jQuery
    单例模式实际应用
    hibernate联合主键注解配置
    spring:ContextLoaderListener接口
    Struts2 校验
    Control character in cookie value, consider BASE64 encoding your value-Cookie保存中文出错[转]
    基于Cookie跨域的单点登录问题
    Spring:启动项目时加载数据库数据(总结)
    Oracle表分区[转]
  • 原文地址:https://www.cnblogs.com/M-Anonymous/p/9370348.html
Copyright © 2011-2022 走看看