Salut, je vous écrit car j'aimerais lire (puis par la suite écrire) dans les registres, mais j'suis un peu (beaucoup) perdu avec les fonctions nécéssairs... J'ai éssayé RegOpenKey/RegQueryValue, mais ça à rien donné de bon...
Salut, je vous écrit car j'aimerais lire (puis par la suite écrire) dans les registres, mais j'suis un peu (beaucoup) perdu avec les fonctions nécéssairs... J'ai éssayé RegOpenKey/RegQueryValue, mais ça à rien donné de bon...
Précise quel genre de cle tu veux lire, et aussi quel OS.
Rappel sous XP, et aussi sans doute doute sous 2000, si on n'a pas les droits admin, on ne peut que lire les clef de HKEY_LOCAL_MACHINE, pas les modifier.
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Pourtant c'est les bonnes fonctions. Quel est ton code ? Quelles sont les erreurs ?Envoyé par Age Piranha
Win XP, mais j'ai les droits d'admin sur mon pc quand même, ouf. Et puis pour l'instant je fais que de la lecture, donc ça devrais aller...
Voilà le code ressemble à ça...
Et ça marche pas, je me retrouve directement avec un impossible d'ouvrir la clef... J'ai pitêtre zappé quelque chose dans l'histoire...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 PHKEY KeyHandle; if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\maclef",0, KEY_ALL_ACCESS,KeyHandle)==ERROR_SUCCESS) { char KeyValue[MAX_PATH]; LPDWORD osf; LPDWORD size; if (RegQueryValueEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\maclef\\INSTALL-PATH",NULL,osf,KeyValue,size)==ERROR_SUCCESS) { /*blablabla*/ } else { printf("Impossible de lire la clefs\n"); } } else { printf("Impossible d'ouvrir la clefs!\n"); }
Ben oui, Problème classique de pointeur non initialisé :
Je reamrque que tu as le même problème avec LPDWORD osf et LPDWORD size; il faut que tu fasses
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 // PHKEY KeyHandle; // c'est un pointeur, il pointe n'importe - ou HKEY KeyHandle; if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\maclef",0, KEY_ALL_ACCESS, &KeyHandle)==ERROR_SUCCESS) { char KeyValue[MAX_PATH]; LPDWORD osf; LPDWORD size; if (RegQueryValueEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\maclef\\INSTALL-PATH",NULL,osf,KeyValue,size)==ERROR_SUCCESS) { /*blablabla*/ } else { printf("Impossible de lire la clefs\n"); } } else { printf("Impossible d'ouvrir la clefs!\n"); }
DWORD osf; DWORD size; et que tu passes les adresses.
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Ok, j'avais éssayé de passer les adresses des LPDWORD, mais là le compilo fesais la gueule... Bon, ça c'est déjà réglé, mais c'est pa ssuffisant puisque je ne peux même pas ouvrir la clef...
Tu ne passes pas la première étape ??
Le code est correct.
Tu as utilisé FormatMessage pour savoir ce qui se passe ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL ); // Process any inserts in lpMsgBuf. // ... // Display the string. MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION ); // Free the buffer. LocalFree( lpMsgBuf );
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
euh non, bonne idée tien... Je vais testerTu as utilisé FormatMessage pour savoir ce qui se passe ?
alors, voici l'érreur qu'il me sort: "Impossible de créer un fichier déjà éxistant"... Pas terrible... Ca m'aide pas trop... Bon, j'vais continuer à chercher...
c'est pas bon ça.
Code : Sélectionner tout - Visualiser dans une fenêtre à part RegQueryValueEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\maclef\\INSTALL-PATH",NULL,osf,KeyValue,size)
1° paramètre : la clé à lire, soit celle que tu as ouverte juste avant => KeyHandle
2° paramètre : le nom de la valeur => "INSTALL-PATH" apparement
4° paramètre : REG_SZ je suppose (osf il vaut quoi ???)
5° paramètre : un buffer pour récupérer sa valeur => KeyValue
6° paramètre : l'adresse d'un DWORD contenant la taille du buffer => même erreur tu files un pointeur non initialisé.
Faut lire la doc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 char KeyValue[ MAX_PATH ]; DWORD size = MAX_PATH; RegQueryValueEx( KeyHandle, "INSTALL-PATH", NULL, REG_SZ, KeyValue, &size )
http://msdn.microsoft.com/library/en-us/sysinfo/base/regqueryvalueex.asp
Hum oups D'après la doc j'avais compris que c'était la fonction qui renseignais le type de clefs :p
Pour le reste j'avais déjà tenté comme ça, mais évidemement ça marchais pas... Bon, j'vais corriger tout ça... Merci
Bon, merci à tous, maintenant ça passe... Je sais pas pourquoi mais ça passe!
Juste une petite correction
Sinon on a le droit à un petit warning du compilateur...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 char KeyValue[ MAX_PATH ]; DWORD size = MAX_PATH; DWORD regtype = REG_SZ RegQueryValueEx( KeyHandle, "INSTALL-PATH", NULL, ®type, KeyValue, &size )
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager