views:

782

answers:

5

Hi,

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  A: 

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.

James D
A: 

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

kenny
+1  A: 

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).

ctacke
+4  A: 

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(HKEY_LOCAL_MACHINE, _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.

Shane Powell
+1  A: 

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

redsolo