wuhao121 发表于 2023-11-17 09:19

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:50

本帖最后由 爱飞的猫 于 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:45

本帖最后由 无问且问 于 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

chayunyuxiang 发表于 2023-11-17 12:47

下载链接在哪?
页: [1]
查看完整版本: C++注册表修改程序