Edit Registry Values

戏子无情 提交于 2019-12-11 01:07:28

问题


I want to change the registry values on the pocketPC. I ran the following code:

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;
}

but it doesn't shange the registry entry. Does anyone know how to set registry key values with c++?

Thanks!


回答1:


There are a two problems with what you are doing:

1: RegSetValueEx does not take a path, only a valuename. So you need to open the key path first.

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: That area of the registry requires Privileged code signing to work on all Windows Mobile devices. You can get away with it on most current touch-screen windows mobile devices if the user says "yes" to the unknown publisher question when the application is first run or installed. If you get a "Access Denied" error on the set, then you really need to be Privileged code signed for the set to work.




回答2:


RegSetValueEx returns a descriptive error code. You can get a human-readable message out of this error code using FormatMessage and possibly via the Error Lookup tool, or the @ERR facility in VS. The code you have looks correct so see what the error message tells you.




回答3:


How are you verifying the change? Keep in mind that making this change will not be reflected automatically in the device behavior and it probably won't show up in the Control Panel either (depends on if the CPL has already been loaded or not). The shell is unaware that you made the change and it doesn't poll the value - you have to tell it to go out and re-read. How to do it is documented in MSDN (basically you set a named system event).




回答4:


Check out [VORegistry][1], it makes working with the registry so much easier.

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




回答5:


Assuming that your looking with RegEdit, did you refresh (F5) the registry view?



来源:https://stackoverflow.com/questions/247093/edit-registry-values

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!