Pregunta

Quiero cambiar los valores de registro en el pocketPC. Corrí el siguiente código:

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

pero no cambia la entrada del registro. ¿Alguien sabe cómo establecer valores de clave de registro con c ++?

¡Gracias!

¿Fue útil?

Solución

Hay dos problemas con lo que estás haciendo:

1: RegSetValueEx no toma una ruta, solo un nombre de usuario. Por lo tanto, primero debes abrir la ruta de acceso de la clave.

por ejemplo

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: esa área del registro requiere la firma de código con privilegios para funcionar en todos los dispositivos Windows Mobile. Puede salirse con la suya en la mayoría de los dispositivos móviles con pantalla táctil actuales si el usuario dice " sí " a la pregunta del editor desconocido cuando la aplicación se ejecuta o instala por primera vez. Si obtiene un " Acceso denegado " error en el conjunto, entonces usted realmente necesita tener un código de Privilegiado firmado para que el conjunto funcione.

Otros consejos

RegSetValueEx devuelve un código de error descriptivo. Puede obtener un mensaje legible para el ser humano de este código de error utilizando FormatMessage y posiblemente a través de la herramienta de búsqueda de errores, o la función @ERR en VS. El código que tiene se ve correcto, así que vea qué le dice el mensaje de error.

¿Cómo estás verificando el cambio? Tenga en cuenta que hacer este cambio no se reflejará automáticamente en el comportamiento del dispositivo y probablemente tampoco se mostrará en el Panel de control (depende de si la CPL ya se ha cargado o no). El shell ignora que usted realizó el cambio y no evalúa el valor; debe decirle que salga y vuelva a leer. La forma de hacerlo es documentado en MSDN (básicamente, establece un nombre evento del sistema).

Echa un vistazo a [VORegistry] [1], hace que trabajar con el registro sea mucho más fácil.

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

Suponiendo que está buscando con RegEdit, ¿actualizó (F5) la vista de registro?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top