Question

Je souhaite modifier les valeurs de registre sur le PocketPC. J'ai exécuté le code suivant:

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

mais cela ne modifie pas l’entrée de registre. Quelqu'un sait-il comment définir les valeurs de clé de registre avec c ++?

Merci!

Était-ce utile?

La solution

Il y a deux problèmes avec ce que vous faites:

1: RegSetValueEx ne prend pas un chemin, mais un nom de valeur. Vous devez donc d'abord ouvrir le chemin d'accès à la clé.

par exemple

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: Cette zone du registre nécessite la signature de code privilégié pour fonctionner sur tous les appareils Windows Mobile. Vous pouvez vous en sortir sur la plupart des appareils mobiles Windows à écran tactile actuels si l'utilisateur dit " yes " à la question de l'éditeur inconnu lorsque l'application est exécutée ou installée pour la première fois. Si vous obtenez un "Accès refusé" erreur sur le jeu, il faut alors que le code privilégié soit signé pour que le jeu fonctionne.

Autres conseils

RegSetValueEx renvoie un code d'erreur descriptif. Vous pouvez obtenir un message lisible par l'homme à partir de ce code d'erreur à l'aide de FormatMessage et éventuellement via l'outil de recherche d'erreur ou la fonction @ERR de VS. Le code que vous avez semble correct alors voyez ce que le message d'erreur vous dit.

Comment vérifiez-vous le changement? N'oubliez pas que cette modification ne sera pas automatiquement reflétée dans le comportement du périphérique et qu'elle n'apparaîtra probablement pas non plus dans le Panneau de configuration (cela dépend si le CPL a déjà été chargé ou non). Le shell ignore que vous avez effectué le changement et il ne scrute pas la valeur - vous devez lui dire de sortir et de relire. Cette procédure est documentée dans MSDN (vous définissez en principe une événement système).

Découvrez [VORegistry] [1], cela facilite beaucoup le travail avec le registre.

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

En supposant que vous cherchiez avec RegEdit, avez-vous actualisé (F5) la vue de registre?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top