您的位置:首页 > 编程语言

WINDOWS编程--32程序操作系统的注册表项的方法

2017-04-12 14:03 316 查看
BOOL IsWow64()
{
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL bIsWow64 = FALSE;
fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(
GetModuleHandle(TEXT("kernel32")),"IsWow64Process");

if(NULL != fnIsWow64Process)
{
if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
{
return FALSE;
}
}
return bIsWow64;
}

// 查询注册表项值
BOOL GetRegQueryValue(HKEY hKey, LPCTSTR lpSubKey,LPCTSTR lpValueName, LPWSTR szQueryValue)
{
HKEY hKeyResult;
//	LONG nResult = RegOpenKey(hKey, lpSubKey, &hResult);
REGSAM samDesired;
if(IsWow64())
samDesired = KEY_READ|KEY_WOW64_64KEY;
LONG nResult = RegOpenKeyEx(hKey, lpSubKey, 0, samDesired, &hKeyResult);

if(ERROR_SUCCESS != nResult)
{
return FALSE;
}

DWORD lValueSize = MAX_PATH, dwType = REG_SZ;
nResult = RegQueryValueEx(hKeyResult, lpValueName, NULL, &dwType, (LPBYTE)szQueryValue, &lValueSize);
if(ERROR_SUCCESS != nResult)
{
RegCloseKey(hKeyResult);
return FALSE;
}
RegCloseKey(hKeyResult);
return TRUE;
}

// 设置注册表项值
BOOL SetRegQueryValue(HKEY hKey, LPCTSTR lpSubKey, LPCTSTR lpValueName, LPWSTR szSetValue)
{
HKEY hKeyResult;
//	LONG nResult = RegOpenKey(hKey, lpSubKey, &hKeyResult);
REGSAM samDesired;
if(IsWow64())
samDesired = KEY_WRITE|KEY_WOW64_64KEY;
LONG nResult = RegOpenKeyEx(hKey, lpSubKey, 0, samDesired, &hKeyResult);

if(ERROR_SUCCESS != nResult)
{
return FALSE;
}

DWORD lValueSize = (lstrlen(szSetValue)+1)*sizeof(TCHAR);
DWORD dwType = REG_SZ;
nResult = RegSetValueEx(hKeyResult, lpValueName, NULL, dwType, (LPBYTE)szSetValue, lValueSize);
if(ERROR_SUCCESS != nResult)
{
RegCloseKey(hKeyResult);
return FALSE;
}
RegCloseKey(hKeyResult);
RegFlushKey(hKey);
return TRUE;
}
使用例子--注意默认项 字符串为空就可以获取到#define	KEY_PATH				 _T("CLSID\\{00020420-0000-0000-C000-000000000046}\\InprocServer32")#define	KEY_PATH2				 _T("CLSID\\{00020424-0000-0000-C000-000000000046}\\InprocServer32")void CRegCompareDlg::OnBnClickedButton1(){TCHAR szQueryValue[1024] = {0};if (!GetRegQueryValue(HKEY_CLASSES_ROOT, KEY_PATH, _T(""), szQueryValue)){TRACE(_T("查询键值出错"));return;}CString str = _T("C:\\Windows\\system32\\oleaut32.dll");if (str==szQueryValue){TRACE(_T("查询键值一致,不做处理返回"));return;}if(SetRegQueryValue(HKEY_CLASSES_ROOT, KEY_PATH, _T(""), str.GetBuffer())){TRACE(_T("设置键值成功"));}else{TRACE(_T("设置键值失败"));}str.ReleaseBuffer();}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: