C++注册表修改程序
求大佬帮忙指导下,如图所示,3个编辑框ID分别是IDC_EDIT1、IDC_EDIT2、IDC_EDIT3,3个按钮IDC_BUTTON1、IDC_BUTTON2、IDC_BUTTON3,需要在IDC_EDIT3中输入时长(天数),点击IDC_BUTTON1停更按钮,会直接修改注册表中系统更新时间:HKEY LOCALMACHINESOFTWARE Microsoft)WindowsUpdatelUX Settings 本帖最后由 爱飞的猫 于 2023-11-17 09:52 编辑- 修改 `WndProc` 窗口处理事件,处理你的按钮的事件。检查 `message` 参数为 [`WM_COMMAND`](https://learn.microsoft.com/en-us/windows/win32/menurc/wm-command) 按钮事件,`wParam` 为组件 ID (如 `IDC_BUTTON1`)。
- [`GetDlgItemText`](https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdlgitemtextw) 获取编辑框内容
- [`RegSetKeyValue`](https://learn.microsoft.com/en-us/windows/win32/api/winreg/nf-winreg-regsetkeyvaluew) 写出注册表项(或复杂的 `RegOpenKeyEx` + `RegSetValueEx` + `RegCloseKey` 组合)
API 的使用说明可以参考上述链接中的 MSDN 文档,微软有自带机翻。不确定的话可以搜 API 名称看别人怎么使用。
注册表操作的话需要注意要在项目链接 `advapi32.lib`。在【项目设定→链接器(Linker)→输入(Input)】里面加入。 本帖最后由 无问且问 于 2023-11-17 10:55 编辑
下面是一个测试函数
void reg() {
HKEY key;
LONG result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\WindowsUpdate\\UX\\Settings", 0, KEY_ALL_ACCESS, &key);
if (result == ERROR_SUCCESS) {
DWORD value = 888;
result = RegSetValueExW(key, L"FlightSettingsMaxPauseDays", 0, REG_DWORD, (const BYTE*)&value, sizeof(value));
if (result == ERROR_SUCCESS) {
std::cout << "注册表修改成功" << std::endl;
}
else {
std::cerr << "注册表修改失败,错误代码为:" << result << std::endl;
}
RegCloseKey(key);
}
else {
std::cerr << "注册表打开失败,错误代码为:" << result << std::endl;
}
}
注意,平台需要选择x64,不能选择x86
调试了很久,一直以为是权限问题,用检查权限的函数也显示没问题:rggrg,后续居然发现是平台问题,崩溃了:'(weeqw 下载链接在哪?
页:
[1]