2

我想更改 PocketPC 上的注册表值。我运行了以下代码:

if(enabled)
{
    dwData = 120;
}
if(RegSetValueEx(HKEY_LOCAL_MACHINE, _T("System\\CurrentControlSet\\Control\\Power\\Timeouts\\BattSuspendTimeout"), 0, REG_DWORD, (LPBYTE)&dwData, sizeof(DWORD)))
{
    return FALSE;
}

但它不会改变注册表项。有谁知道如何使用 c++ 设置注册表项值?

谢谢!

4

5 回答 5

7

您正在做的事情有两个问题:

1:RegSetValueEx 不带路径,只取值名。所以你需要先打开密钥路径。

例如

HKEY key;
if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, "System\\CurrentControlSet\\Control\\Power\\Timeouts", 0, 0, &key))
{
    if(RegSetValueEx(key, _T("BattSuspendTimeout"), 0, REG_DWORD, (LPBYTE)&dwData, sizeof(DWORD)))
    {
        RegCloseKey(key);
        return FALSE;
    }

    RegCloseKey(key);
}

2:该注册表区域需要特权代码签名才能在所有 Windows Mobile 设备上运行。如果用户在首次运行或安装应用程序时对未知发布者的问题说“是”,则您可以在大多数当前的触摸屏 Windows 移动设备上摆脱它。如果您在设备上收到“拒绝访问”错误,那么您确实需要签署特权代码才能使设备正常工作。

于 2008-10-29T22:05:39.213 回答
1

RegSetValueEx 返回描述性错误代码。您可以使用 FormatMessage 并可能通过错误查找工具或 VS 中的 @ERR 工具从此错误代码中获取人类可读的消息。您拥有的代码看起来正确,因此请查看错误消息告诉您的内容。

于 2008-10-29T15:48:40.067 回答
1

您如何验证更改?请记住,进行此更改不会自动反映在设备行为中,并且可能也不会显示在控制面板中(取决于 CPL 是否已加载)。shell 不知道您进行了更改并且它不会轮询该值 - 您必须告诉它出去并重新读取。如何做到这一点在 MSDN 中有记录(基本上你设置了一个命名的系统事件)。

于 2008-10-29T17:13:01.487 回答
1

查看 [VORegistry][1],它使使用注册表变得更加容易。

[1]:http: //www.voscorp.com/products/developer/winmobile/voregistry/index.htm VORegistry

于 2008-10-30T10:05:56.683 回答
0

假设您正在使用 RegEdit,您是否刷新 (F5) 注册表视图?

于 2008-10-29T16:58:14.153 回答