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();}
相关文章推荐
- C#程序及批处理中确定windows操作系统的方法
- 执行此安装程序之前,必须安装 32 位 Windows 映像处理组件(WIC)解决的方法
- Windows NT/2000操作系统认证方法
- 调整Windows窗体程序多个子控件大小和位置的API标准方法
- 优化Windows操作系统的程序运行
- 如何让自己的应用程序,控制台程序,windows 服务收到操作系统注销或者重启的消息
- 改注册表,在一定时间内只能运行指定程序,知道用组策略管理器,可以实现,不过我想用编程的方法。
- Windows MFC编程之一 最简单的MFC程序
- 绕过Windows操作系统正版验证新方法
- Windows下程序修改IP的三种方法
- 在VB中使程序在windows启动时启动的方法
- 《windows应用高级编程-C#编程篇》书中程序的小问题及改进
- 今日试用wine,让windows可执行程序在linux操作系统下运行!
- Windows平台下简单运行Java程序的方法
- Windows2000/xp通过修改注册表禁用程序的方法
- Windows自动启动程序方法
- Tips: 如何让自己的应用程序,控制台程序,windows 服务收到操作系统注销或者重启的消息?
- 嵌入式操作系统VxWorks简介及编程方法
- windows防病毒的方法,用一个程序限制浏览器权限
- Windows操作系统常见驱动故障解决方法