C/C++ 实现读写注册表

编程入门 行业动态 更新时间:2024-10-10 14:26:22

C/C++ 实现读写<a href=https://www.elefans.com/category/jswz/34/1771218.html style=注册表"/>

C/C++ 实现读写注册表

读注册表

// 初始化HKEY hKey_return = NULL;// 打开注册表失败if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE,				// 注册表根键句柄(也可以是 HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_USERS、HKEY_CURRENT_CONFIG) 去掉第一个参数后的注册表路径,		// 注册表路径(开头无'\',结尾有'\')0,								// 保留KEY_READ,						// 只读&hKey_return					// 接收打开键的指针(RegQueryValueEx 会用到))){cout << "RegOpenKeyEx failed." << endl;return false;}// 打开键失败char keyValue[256];DWORD keySzType;DWORD keySize;if(ERROR_SUCCESS != RegQueryValueEx(hKey_return,					// 由 RegOpenKeyEx 返回注册表键名,						// 键名0,								// 不定义值类型&keySzType,						// 接收键类型(LPBYTE)&keyValue,				// 接收键值&keySize						// 接收键值的字节大小)){cout << "RegQueryValueEx failed." << endl;return false;}// 打印注册表键值cout << keyValue << endl;

写注册表: 这是一个例子,有多余的代码。功能大概是遍历了某个注册表键下的所有键值,酌情修改其中的某个数据 😄

BOOL CDesktopController::CheckShellFloders()
{std::map<std::wstring, std::wstring> mapShellFolders = {{L"AppData",			L"%USERPROFILE%\\AppData\\Roaming"},{L"Cache",				L"%USERPROFILE%\\AppData\\Local\\Microsoft\\Windows\\INetCache"},{L"Cookies",			L"%USERPROFILE%\\AppData\\Local\\Microsoft\\Windows\\INetCookies"},{L"Desktop",			L"%USERPROFILE%\\Desktop"},{L"Favorites",			L"%USERPROFILE%\\Favorites"},{L"History",			L"%USERPROFILE%\\AppData\\Local\\Microsoft\\Windows\\History"},{L"Local AppData",		L"%USERPROFILE%\\AppData\\Local"},{L"My Music",			L"%USERPROFILE%\\Music"},{L"My Pictures",		L"%USERPROFILE%\\Pictures"},{L"My Video",			L"%USERPROFILE%\\Videos"},{L"NetHood",			L"%USERPROFILE%\\AppData\\Roaming\\Microsoft\\Windows\\Network Shortcuts"},{L"Personal",			L"%USERPROFILE%\\Documents"},{L"PrintHood",			L"%USERPROFILE%\\AppData\\Roaming\\Microsoft\\Windows\\Printer Shortcuts"},{L"Programs",			L"%USERPROFILE%\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs"},{L"Recent",				L"%USERPROFILE%\\AppData\\Roaming\\Microsoft\\Windows\\Recent"},{L"SendTo",				L"%USERPROFILE%\\AppData\\Roaming\\Microsoft\\Windows\\SendTo"},{L"Start Menu",			L"%USERPROFILE%\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu"},{L"Startup",			L"%USERPROFILE%\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup"},{L"Templates",			L"%USERPROFILE%\\AppData\\Roaming\\Microsoft\\Windows\\Templates"}};BOOL ret = FALSE;BOOL needKillExplorer = FALSE;HKEY hTestKey = NULL;DWORD cSubKeys = 0;					// 子健个数DWORD cValues = 0;					// 键值个数TCHAR achValue[MAX_VALUE_NAME];		// 键值名DWORD cchValue = MAX_VALUE_NAME;	// 键值最大长度TCHAR achData[MAX_VALUE_DATA];		// 键数据DWORD cchData = MAX_VALUE_DATA;		// 键数据最大长度DWORD cbName = 0;// 遍历 HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/User Shell Folders if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_CURRENT_USER,L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders",0,KEY_ALL_ACCESS,&hTestKey)){LOG_INFO_A("RegOpenKeyEx failed. \n");goto end;}if (ERROR_SUCCESS != RegQueryInfoKey(hTestKey,NULL,NULL,NULL,&cSubKeys,NULL,NULL,&cValues,NULL,NULL,NULL,NULL)){LOG_INFO_A("RegQueryInfoKey failed. \n");goto end;}for (UINT i = 0; i < cValues; ++i){cchValue = MAX_VALUE_NAME;cchData = MAX_VALUE_DATA;achValue[0] = '\0';achValue[0] = '\0';if (ERROR_SUCCESS != RegEnumValue(hTestKey,i,achValue,&cchValue,NULL,NULL,(LPBYTE)achData,&cchData)){LOG_INFO_A("RegEnumValue failed. \n");continue; }// 如果有 \\ 开头的网络路径,就恢复if (achData[0] == '\\' && achData[1] == '\\'){if (mapShellFolders.find(achValue) == mapShellFolders.end()){continue;}if (ERROR_SUCCESS != RegSetValueEx(hTestKey,achValue,0,REG_EXPAND_SZ,(const BYTE*)mapShellFolders.find(achValue)->second.c_str(),MAX_VALUE_DATA)){LOG_INFO_A("[LYSM] RegSetValueEx failed. \n");continue;}needKillExplorer = TRUE;}}// 杀安全桌面 - explorer.exe 进程,使注册表改动生效 if (needKillExplorer){if (!killSecureExplorer()){goto end;}}ret = TRUE;
end:if (hTestKey){RegCloseKey(hTestKey);}return ret;
}

更多推荐

C/C++ 实现读写注册表

本文发布于:2024-03-14 04:47:47,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1735660.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:注册表

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!