PDA

View Full Version : [C++] Problemi Con Funzione RegEnumKey()


skeleton
24-04-2011, 20:05
Buona sera a tutti e soprattutto buona Pasqua!!

Avrei un problema con questo "semplice" :D programma:
#include <windows.h>
#include <conio.h>
#include <iostream>
using namespace std;

main(){
long result; //Variabile per verificare la corretta esecuzione di una funzione
HKEY hKey;
TCHAR percKey[] = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; //Percorso chiave di registro
TCHAR nameKey[256];
int numKey = 0;

result = RegOpenKey(HKEY_LOCAL_MACHINE, percKey, &hKey);
if (result != ERROR_SUCCESS){
cout<<"Errore Apertura Percorso Del Registro!!";
getch();
return 1;
}
cout<<"Apertura Percorso Del Registro Avvenuta Con Successo!!\n\n\n";

{
result = RegEnumKey(hKey, numKey, nameKey, 256);
cout<<"\nNome Chiave: "<<nameKey;
numKey ++;
} while (result != ERROR_NO_MORE_ITEMS);

RegCloseKey(hKey);
getch();
}

Il problema riguarda l'output, nel senso che il programma mi restituisce per il nome della chiave solo il valore "Nome", una sola volta, e poi continua a ciclare all'infinito (finchè non lo chiudo manualmente).

Chiedo cortesemente una soluzione.

tuccio`
24-04-2011, 20:17
Buona sera a tutti e soprattutto buona Pasqua!!

Avrei un problema con questo "semplice" :D programma:
#include <windows.h>
#include <conio.h>
#include <iostream>
using namespace std;

main(){
long result; //Variabile per verificare la corretta esecuzione di una funzione
HKEY hKey;
TCHAR percKey[] = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; //Percorso chiave di registro
TCHAR nameKey[256];
int numKey = 0;

result = RegOpenKey(HKEY_LOCAL_MACHINE, percKey, &hKey);
if (result != ERROR_SUCCESS){
cout<<"Errore Apertura Percorso Del Registro!!";
getch();
return 1;
}
cout<<"Apertura Percorso Del Registro Avvenuta Con Successo!!\n\n\n";

{
result = RegEnumKey(hKey, numKey, nameKey, 256);
cout<<"\nNome Chiave: "<<nameKey;
numKey ++;
} while (result != ERROR_NO_MORE_ITEMS);

RegCloseKey(hKey);
getch();
}

Il problema riguarda l'output, nel senso che il programma mi restituisce per il nome della chiave solo il valore "Nome", una sola volta, e poi continua a ciclare all'infinito (finchè non lo chiudo manualmente).

Chiedo cortesemente una soluzione.

{
result = RegEnumKey(hKey, numKey, nameKey, 256);
cout<<"\nNome Chiave: "<<nameKey;
numKey ++;
} while (result != ERROR_NO_MORE_ITEMS);



se il codice è proprio questo.. allora hai dimenticato di scrivere do prima della graffa, quindi hai un blocco che viene eseguito una volta e un while senza body con la condizione che rimane vera e looppa

skeleton
25-04-2011, 09:50
Grazie mille per il suggerimento, non c'avevo riflettuto!!:doh:
Ho pensato di usare un ciclo for anzichè un do while per ridurre le righe di codice, e sembra che funzioni:

#include <windows.h>
#include <conio.h>
#include <iostream>
using namespace std;

main(){
long result; //Variabile per verificare la corretta esecuzione di una funzione
HKEY hKey;
TCHAR percKey[] = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; //Percorso chiave di registro
TCHAR nameKey[256];

result = RegOpenKey(HKEY_LOCAL_MACHINE, percKey, &hKey);
if (result != ERROR_SUCCESS){
cout<<"Errore Apertura Percorso Del Registro!!";
getch();
return 1;
}
cout<<"Apertura Percorso Del Registro Avvenuta Con Successo!!\n\n\n";

for (int numKey = 0; result != ERROR_NO_MORE_ITEMS; numKey ++){
result = RegEnumKey(hKey, numKey, nameKey, 256);
cout<<"\nNome Chiave: "<<nameKey;
}

RegCloseKey(hKey);
getch();
}

Ancora Grazie Mille!!:D