PDA

View Full Version : [C++] Aggiungere chiave nel Registro di Windows


max1850
01-11-2006, 21:35
Salve. Uso Visual C++.
Vorrei sapere come fare ad aggiungere e cancellare una chiave col rispettivo valore nel registro di windows xp.
Ho provato a vedere qualche esempio sul "RegCreateKey" e sul "RegSetValueEx" ma sono esempi troppo complessi per me. Dove posso trovare una spiegazione (possibilmente in italiano) o trovare un esempio più semplice?

Grazie :)
Max!

andbin
01-11-2006, 22:04
Salve. Uso Visual C++.
Vorrei sapere come fare ad aggiungere e cancellare una chiave col rispettivo valore nel registro di windows xp.
Ho provato a vedere qualche esempio sul "RegCreateKey" e sul "RegSetValueEx" ma sono esempi troppo complessi per me. Dove posso trovare una spiegazione (possibilmente in italiano) o trovare un esempio più semplice?

Grazie :)
Max!Basta vedere la documentazione delle API Win32 RegXXX.

Per creare una chiave, esempio:
LONG lResult;
HKEY hKey;

lResult = RegCreateKeyEx (HKEY_CURRENT_USER, "bla\\bla\\bla...", 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hKey, NULL);

if (lResult == ERROR_SUCCESS)
{
....

RegCloseKey (hKey);
}Per cancellare una chiave, usa RegDeleteKey o anche SHDeleteKey. Per gestire i valori ci sono ad esempio RegSetValueEx e RegDeleteValue.

max1850
01-11-2006, 22:24
Ciao.
Allora...ho scritto il codice che posto qui sotto:

LONG lResult;
HKEY hKey;

lResult = RegCreateKeyEx (HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hKey, NULL);

If (lResult == ERROR_SUCCESS)
{
cout << "OK! Registro modificato!";
RegCloseKey (hKey);
}

e mi esce l'errore "Errore: C2664: 'RegCreateKeyExW': impossibile convertire il parametro 2 da 'const char [46]' a 'LPCWSTR' ".
Cosa significa?

P.S. : dove posso trovare la documentazione delle API Win32 ?

Ciao
Max!

vizzz
01-11-2006, 23:23
wsprintf(szBuf, "SYSTEM\\CurrentControlSet\\Services\\EventLog\\%s\\%s", pszLogName, pszSrcName);

if (RegCreateKeyEx(HKEY_LOCAL_MACHINE, szBuf, 0, NULL, REG_OPTION_NON_VOLATILE,KEY_WRITE, NULL, &hk, &dwDisp))
{
printf("Could not create the registry key.");
return FALSE;
}

questo è un esempio dal sito msdn

tomminno
01-11-2006, 23:49
e mi esce l'errore "Errore: C2664: 'RegCreateKeyExW': impossibile convertire il parametro 2 da 'const char [46]' a 'LPCWSTR' ".
Cosa significa?

P.S. : dove posso trovare la documentazione delle API Win32 ?

Ciao
Max!

Significa che hai creato un progetto Unicode. Tra le proprietà generali del progetto ci dovrebbe essere una voce "Character set", dovresti impostarlo su "not set".
Per la documentazione cerca su www.msdn.com (http://www.msdn.com)

andbin
02-11-2006, 09:59
e mi esce l'errore "Errore: C2664: 'RegCreateKeyExW': impossibile convertire il parametro 2 da 'const char [46]' a 'LPCWSTR' ".
Cosa significa?Il tuo progetto è impostato per utilizzare i caratteri in Unicode. Hai 2 possibilità: o metti tutte le stringhe letterali come L"...." oppure modifichi le impostazioni del progetto (come ha detto tomminno).

Inoltre la chiave 'Run' che hai indicato è molto probabile (al 99%) che sia già esistente, quindi RegCreateKeyEx fa nient'altro che aprire la chiave e ritornare l'handle.

max1850
02-11-2006, 12:21
Significa che hai creato un progetto Unicode. Tra le proprietà generali del progetto ci dovrebbe essere una voce "Character set", dovresti impostarlo su "not set".
Per la documentazione cerca su www.msdn.com (http://www.msdn.com)
SI. In effetti l'errore veniva fuori a causa dell'Unicode. ;)
Grazie a tutti dell'aiuto!
Max!