C++及WinAPI读写注册表

C++及WinAPI读写注册表

 

需要使用头文件

"windows.h"

 

1.regoperator.h

/**

*调用WinAPI读写注册表

**/

#ifndef REGOPERATOR_H

#define REGOPERATOR_H

#include"windows.h"

#include"tchar.h"

class RegOperator

{

public:

RegOperator();

void RegWrite(HKEY keyHandle , LPCWSTR subKey, LPCSTR valueName, DWORD valueType, const char *valueString);

unsigned char *RegRead(HKEY keyHandle, LPCWSTR subKey, LPCSTR valueName, LPDWORD valueType);

};

#endif // REGOPERATOR_H

2.regoperator.cpp

#include "regoperator.h"
#include

RegOperator::RegOperator()

{

}
//写注册表
void RegOperator::RegWrite(HKEY keyHandle ,LPCWSTR subKey,LPCSTR valueName,
                             DWORD valueType,const char *valueString)
{
    HKEY hkey;
    //如果键存在则打开,不存在则创建
    //仍需要以管理员身份运行
    if(RegCreateKeyEx(keyHandle,subKey,0,NULL,REG_OPTION_NON_VOLATILE,
                   KEY_ALL_ACCESS,NULL,&hkey,NULL)==ERROR_SUCCESS){
        //当写入REG_SZ、REG_MULTI_SZ或REG_EXPAND_SZ时,用RegSetValueExA,否则用RegSetValueEx
        if(RegSetValueExA(hkey,valueName,0,valueType,(const BYTE*)valueString,
                                              strlen(valueString))!=ERROR_SUCCESS){
            qDebug()<<"注册表写入失败!";
        }
    }
    RegCloseKey(hkey);
    //关闭才能写入
}


//读注册表
unsigned char *RegOperator::RegRead(HKEY keyHandle,LPCWSTR subKey, LPCSTR valueName,LPDWORD valueType)
{
    HKEY hkey;
   //打开以获取得hkey
    if(RegOpenKeyEx(keyHandle,subKey,0,KEY_READ,&hkey)!=ERROR_SUCCESS){       
        return 0;
    }
    //先查询键值的长度
    unsigned long size=0;
    //当查询REG_SZ、REG_MULTI_SZ或REG_EXPAND_SZ类型数据时,需要用RegQueryValueExA,
    //否则用RegQueryValueEx(注意两者的参数类型不同)
    if(RegQueryValueExA(hkey,valueName,0,valueType,NULL,&size)!=ERROR_SUCCESS){
        RegCloseKey(hkey);       
        return 0;
    }
    unsigned char *result=new unsigned char[size];
    memset(result,0,size);//将数组的每个元素设为'/0'
    if(RegQueryValueExA(hkey,valueName,0,valueType, result,&size)!=ERROR_SUCCESS){
        RegCloseKey(hkey);       
        return 0;
    }
    RegCloseKey(hkey); 
    return result;
}

你可能感兴趣的:(C++,Qt)