0
点赞
收藏
分享

微信扫一扫

MFC-注册表

MFC-注册表_句柄

MFC-注册表_键值_02

 

 

打开注册表键 

HKEY phkResult=NULL;

    LONG L = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\lm"), 0, KEY_WOW64_64KEY | KEY_READ, &phkResult);//打开注册表键
    /*
    参数1:HKEY hKey          需要打开的主键的名称
            HKEY_CLASSES_ROOT
            HKEY_CURRENT_USER
            HKEY_LOCAL_MACHINE
            HKEY_USERS
            HKEY_CURRENT_CONFIG
    参数2:LPCTSTR lpSubKey   需要打开的子键的名称
            以null结尾的字符串指针,包含要打开的注册表子项的名称。如果参数设置为NULL 或者指向一个空字符串,该函数将打开由hKey参数标识的键的新句柄。这种情况下,函数不会关闭先前已经打开的句柄
            注意:\\ 
    参数3:DWORD ulOptions    保留,设为0
    参数4:REGSAM samDesired  安全访问标记,也就是权限
            KEY_ALL_ACCESS=0xF003F   包含所有权限
            
    参数5:PHKEY phkResult    保存打开键的句柄
            指向一个接收到打开的键的句柄的变量的指针。当您不再需要返回的句柄时,调用RegCloseKey函数来关闭它
    返回值:如果函数调用成功,则返回0(ERROR_SUCCESS)。否则,返回值为文件WINERROR.h中定义的一个非零的错误代码
            错误代码可以通过 菜单栏-->工具-->错误查找    查看发生错误的原因

    */


    if (L== ERROR_SUCCESS)
    {
        AfxMessageBox(_T("打开成功"));
    }

注意容易发生的错误:

  64位机制  x86环境下   必须用KEY_WOW64_64KEY  

  

MFC-注册表_错误代码_03

错误代码查询:

  菜单栏-->工具--> 错误查找

  

MFC-注册表_键值_04

释放注册键句柄 

LONG LL = ::RegCloseKey(phkResult); //释放注册键句柄
    //参数:HKEY hKey 释放键的句柄
    //返回值: 如果过程执行成功,返回值是 ERROR_SUCCESS。如果功能失败,返回一个非零值,错误码在 Winerror.h 定义

创建或打开子键 

HKEY phkResult = NULL;
    DWORD lpdw;

    LONG L = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\lm"), 0, KEY_ALL_ACCESS, &phkResult);

    LONG LL=RegCreateKeyEx(phkResult,_T("liming"),0,NULL, REG_OPTION_VOLATILE, KEY_ALL_ACCESS,NULL, &phkResult, &lpdw);//创建或打开子键
    /*
    如果新键不存在就创建,如果新键已经存在就打开, [可以创建n深层的子键]
    参数1:HKEY  一个打开键的句柄。调用该函数的进程必须拥有KEY_CREATE_SUB_KEY的权力。该句柄可以是RegCreateKeyEx或者RegOpenKeyEx的返回值,也可以是以下预定义的值
                HKEY_CLASSES_ROOT
                 HKEY_CURRENT_CONFIG
                HKEY_CURRENT_USER
                HKEY_LOCAL_MACHINE
                HKEY_USERS
    参数2:标识子键名称。该参数不能为空。参数中不能存在(/)
    参数3:保留值,必须为0
    参数4:指向一个字符串,该字符串定义了该键的类型
    参数5: REG_OPTION_NON_VOLATILE
            REG_OPTION_VOLATILE              一般使用该值(保存新键)
            REG_OPTION_BACKUP_RESTORE
    参数6:指定对密钥的期望访问权限
            [看上面]
    参数7:一个SECURITY_ATTRIBUTES结构的指针,该结构确定返回的句柄是否可以被子进程继承。如果为NULL,则不能继承该句柄
    参数8:PHKEY 保存返回的句柄
    参数9:LPDWORD  保存新键之前是否存在;可以为NULL
            REG_CREATED_NEW_KEY=0x00000001L        该键是新创建的键
             REG_OPENED_EXISTING_KEY=0x00000002L   该键是已经存在的键
    返回值:如果函数成功,返回值为ERROR_SUCCESS。如果函数失败,返回值是Winerror.h中定义的非零错误代码

    */


    if(LL== ERROR_SUCCESS)
    {
        CString str;
        str.Format(_T("LL=%d"),LL);
        ::OutputDebugString(str);

    }

MFC-注册表_键值_05

删除注册表键 

HKEY phkResult = NULL;
    
    LONG L = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\lm"), 0, KEY_ALL_ACCESS, &phkResult);

    LONG LL=RegDeleteKey(phkResult, _T("liming")); //删除注册表键
    /*
    参数1:HKEY  键的句柄
           可以使用下列的常量:
            HKEY_CLASSES_ROOT
            HKEY_CURRENT_CONFIG
            HKEY_CURRENT_USER
            HKEY_LOCAL_MACHINE
            HKEY_USERS
    参数2:LPCTSTR  被删除的键名称
            键值的名称不区分大小写
    返回值:如果函数成功,返回值是ERROR_SUCCESS。如果函数失败,返回值是非零错误代码定义在 Winerror.h
    说明:函数仅删除最后一层子键以及下面的全部键值项

    */

 

RegQueryInfoKey获取键的信息 

HKEY phkResult = NULL;
    DWORD num = 100;
    DWORD len = 0;
    DWORD num1 = 0;
    DWORD mingcen = 0;
    DWORD suju = 0;
    

    LONG L = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\lm"), 0, KEY_WOW64_64KEY | KEY_ALL_ACCESS, &phkResult);

    L=RegQueryInfoKey(phkResult, NULL, NULL,NULL,&num,&len,NULL,&num1,&mingcen,&suju, NULL,NULL);//获取键的信息
    /*
    参数1:HKEY   打开的注册表项的句柄。 密钥必须已使用KEY_QUERY_VALUE访问权限打开
    参数2:LPWSTR,指定一个字串,用于装载这个注册表项的类名,一般为NULL
    参数3:LPDWORD,指定一个变量,用于装载参数2缓冲区的长度。一旦返回,它会设为实际装载到缓冲区的字节数量,一般为NULL
    参数4:LPDWORD,未用,设为NULL
    参数5:LPDWORD,用于保存直接子键数量的一个变量
    参数6:LPDWORD,指定一个变量,用于装载这个项最长一个子键的长度。注意这个长度不包括空中止字符
    参数7:LPDWORD,指定一个变量,用于装载这个项之子键的最长一个类名的长度。注意这个长度不包括空中止字符,一般为NULL
    参数8:LPDWORD,用于保存键值的数量(不包括默认),可以为NULL
    参数9:LPDWORD,指定一个变量,用于保存这个项之子键的最长一个键值名称的长度。注意这个长度不包括空中止字符,可以为NULL
    参数10:LPDWORD,指定一个变量,用于保存这个项最长一个键值数据长度
    参数11:LPDWORD,保存安全描述符长度的一个变量,一般为NULL
    参数12:FILETIME,指定一个结构,用于保存该项的上一次修改时间,可以为NULL

    返回值:Long,零(ERROR_SUCCESS)表示成功。其他任何值都代表一个错误代码。
               如一个缓冲区的长度不够,不能容下返回的数据,则函数会返回ERROR_MORE_DATA

    */

 

 

 

 

  

 

 

 

 

 

 

 

 



举报

相关推荐

0 条评论