2008-10-29 93 views
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 + +的注册表键值?

谢谢!

回答

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设备上运行。如果用户在第一次运行或安装应用程序时对未知的发布者问题说“是”,那么您可以在大多数当前的触摸屏窗口移动设备上使用它。如果您在该组中出现“拒绝访问”错误,那么您确实需要签署特权代码才能使该组正常工作。

1

RegSetValueEx返回一个描述性错误代码。您可以使用FormatMessage并可能通过错误查找工具或VS中的@ERR工具从此错误代码中获取可读的消息。你看到的代码看起来是正确的,看看错误信息告诉你什么。

0

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

1

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