Domanda

Voglio cambiare i valori di registro sul pocketPC. Ho eseguito il seguente codice:

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

ma non cambia la voce di registro. Qualcuno sa come impostare i valori della chiave di registro con c ++?

Grazie!

È stato utile?

Soluzione

Esistono due problemi con ciò che stai facendo:

1: RegSetValueEx non utilizza un percorso, ma solo un valore. Quindi devi prima aprire il percorso chiave.

per es.

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: quell'area del registro richiede la firma del codice Privileged per funzionare su tutti i dispositivi Windows Mobile. Puoi cavartela con la maggior parte dei dispositivi mobili Windows touch-screen attuali se l'utente dice "sì" alla domanda dell'editore sconosciuta quando l'applicazione viene eseguita o installata per la prima volta. Se ricevi un " Accesso negato " errore sul set, quindi è necessario avere il codice Privileged firmato per il funzionamento del set.

Altri suggerimenti

RegSetValueEx restituisce un codice di errore descrittivo. È possibile ottenere un messaggio leggibile dall'uomo da questo codice di errore utilizzando FormatMessage e possibilmente tramite lo strumento Ricerca errori o la funzione @ERR in VS. Il codice che hai sembra corretto, quindi vedi cosa ti dice il messaggio di errore.

Come stai verificando la modifica? Tieni presente che apportare questa modifica non si rifletterà automaticamente sul comportamento del dispositivo e probabilmente non verrà visualizzato nemmeno nel Pannello di controllo (dipende dal fatto che il CPL sia già stato caricato o meno). La shell non è a conoscenza del fatto che hai apportato la modifica e non esegue il polling del valore: devi dirlo per uscire e rileggere. Come farlo è documentato in MSDN (fondamentalmente hai impostato un nome evento di sistema).

Dai un'occhiata a [VORegistry] [1], rende molto più facile lavorare con il registro.

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

Supponendo che il tuo aspetto con RegEdit, hai aggiornato (F5) la vista del registro?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top