我想更改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 ++设置注册表键值?

谢谢!

有帮助吗?

解决方案

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

1:RegSetValueEx不采用路径,只采用valuename。所以你需要先打开密钥路径。

e.g。

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设备上运行。如果用户说“是”,则可以在大多数当前的触摸屏窗口移动设备上使用它。首次运行或安装应用程序时的未知发布者问题。如果您收到“拒绝访问”,集合上的错误,那么你真的需要为该集合签名的特权代码才能工作。

其他提示

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top