编辑注册表值
问题描述:
我想更改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不采取路径,只有一个值名。所以你需要先打开关键路径。
例如
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工具从此错误代码中获取可读的消息。你看到的代码看起来是正确的,看看错误信息告诉你什么。
答
假设您使用RegEdit查找,是否刷新(F5)注册表视图?
答
你是如何验证变更的?请记住,进行此更改将而不是自动反映在设备行为中,并且它可能不会显示在控制面板中(取决于CPL是否已被加载)。 shell不知道你是否做出了改变,它并没有调查价值 - 你必须告诉它出去并重新阅读。如何做到这一点是documented in MSDN(基本上你设置了一个命名的系统事件)。
答
查看[VORegistry] [1],它使得与注册表的工作变得更容易。
[1]:http://www.voscorp.com/products/developer/winmobile/voregistry/index.htm VORegistry