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

来源:互联网 发布:虚拟机优化显卡性能 编辑:程序博客网 时间:2024/06/03 12:57
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;}
使用例子--注意默认项 字符串为空就可以获取到#defineKEY_PATH _T("CLSID\\{00020420-0000-0000-C000-000000000046}\\InprocServer32")#defineKEY_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();}




0 0
原创粉丝点击