// RegGetValue 只能在WIN Vista以后以及 WIN XP64下使用
//#define WIN32_WINNT 0x0600 /*RegGetValue()要定义这个*/
#include <tchar.h>
#include <stdio.h>
#include <windows.h>
#include <locale.h>
class RegistryConfig
{
private:
HKEY m_hRootKey;
HKEY m_hKey;
TCHAR *m_szSubKey;
char *m_pbValueData;
public:
~RegistryConfig()
{
if( NULL!=m_szSubKey )
{
delete []m_szSubKey;
m_szSubKey=NULL;
}
if( NULL!=m_pbValueData)
{
delete []m_pbValueData;
m_pbValueData=NULL;
}
RegCloseKey(m_hKey);
}
RegistryConfig(TCHAR *szSubKey)
{
m_hRootKey=HKEY_LOCAL_MACHINE;
m_pbValueData=NULL;
m_szSubKey=new TCHAR[ lstrlen(szSubKey)*sizeof(TCHAR)];
lstrcpy(m_szSubKey,szSubKey);
_tprintf(TEXT("---------------------- -------------------------------\n"));
if(ERROR_SUCCESS==RegOpenKeyEx(m_hRootKey,m_szSubKey,0,KEY_ALL_ACCESS,&m_hKey) )
{
_tprintf(TEXT("RegOpenKeyEx成功!\n"));
}
else
{
_tprintf(TEXT("RegOpenKeyEx失败!\n"));
if (ERROR_SUCCESS==RegCreateKey(m_hRootKey,m_szSubKey,&m_hKey))
{
_tprintf(TEXT("RegCreateKey成功!\n"));
}
else
{
_tprintf(TEXT("RegCreateKey失败!\n"));
}
}
_tprintf(TEXT("---------------------- -------------------------------\n"));
}
bool set(TCHAR *szValueName,DWORD dwValueData)
{
if(m_hKey!=NULL && ERROR_SUCCESS==RegSetValueEx(m_hKey,szValueName,0,REG_DWORD,(const BYTE *)&dwValueData,4) )
{
_tprintf(TEXT("RegSetValueEx成功!\n"));
return true;
}
else
{
_tprintf(TEXT("RegSetValueEx失败!\n"));
return false;
}
}
bool set(TCHAR *szValueName,TCHAR *szValueData)
{
DWORD cbLen=lstrlen(szValueData)*sizeof(TCHAR);
if( m_hKey!=NULL && ERROR_SUCCESS==RegSetValueEx(m_hKey,szValueName,0,REG_SZ,(const BYTE *)szValueData,cbLen) )
{
_tprintf(TEXT("RegSetValueEx成功!\n"));
return true;
}
else
{
_tprintf(TEXT("RegSetValueEx失败!\n"));
return false;
}
}
PVOID get(TCHAR *szValueName)
{
DWORD ValueBufferSize=0;
if( NULL!=m_pbValueData)
{
delete []m_pbValueData;
m_pbValueData=NULL;
}
方式一vista or later or xp64
//if( m_hKey!=NULL && ERROR_SUCCESS == RegGetValue( m_hRootKey, m_szSubKey,szValueName,RRF_RT_ANY,NULL/*&RegType*/, NULL, &ValueBufferSize) ) //取得缓冲大小
//{
//m_pbValueData=new char[ValueBufferSize];
//if(ERROR_SUCCESS == RegGetValue( m_hRootKey, m_szSubKey , szValueName, RRF_RT_ANY, NULL/*&RegType*/, (PVOID)m_pbValueData, &ValueBufferSize) )
//{
//return m_pbValueData;
//}
//}
方式二 xp or later//
if( m_hKey!=NULL && ERROR_SUCCESS == RegQueryValueEx(m_hKey,szValueName,NULL/*LPDWORD lpReserved*/, NULL/*&RegType*/, NULL,&ValueBufferSize) ) //取得缓冲大小
{
m_pbValueData=new char[ValueBufferSize+1];//若为字符串如REG_SZ末尾必须要自行加入NULL
if(ERROR_SUCCESS == RegQueryValueEx(m_hKey,szValueName,NULL/*LPDWORD lpReserved*/, NULL/*&RegType*/, (LPBYTE)m_pbValueData,&ValueBufferSize) )
{
m_pbValueData[ValueBufferSize]=0;
return m_pbValueData;
}
}
/
return NULL;
}
};
int _tmain(int argc, char* argv[])
{
_tsetlocale(LC_CTYPE,TEXT("chs"));
RegistryConfig reg(TEXT("SOFTWARE\\Who cares"));
TCHAR *st=TEXT("HERE I AM");
TCHAR *hello=TEXT("hellowrold");
reg.set(st,hello);
reg.set(TEXT("YOU'RE AWESOME!"),100);
_tprintf(TEXT("ret:%s\n"),(TCHAR*)reg.get(st));
_tprintf(TEXT("ret:%d\n"),*(DWORD*)reg.get(TEXT("YOU'RE AWESOME!")));
}
12-19
05-15
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交