09. februar 2004 - 17:03
Der er
10 kommentarer og 1 løsning
Udtræk fra reg.db.?
Hvordan er det lige man laver udtræk fra registrerings-db?
Annonceindlæg fra Infor
09. februar 2004 - 17:10
#1
Jeg lavede engang dette lille eksempel: #include <windows.h> #include <stdio.h> #include <string.h> void getinfo(char *key, char *info) { HKEY hk; if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, key, 0, KEY_QUERY_VALUE, &hk) == ERROR_SUCCESS) { DWORD ix = 0; char name[1024]; BYTE value[1024]; DWORD namelen, type, valuelen; namelen = sizeof(name); valuelen = sizeof(value); while(RegEnumValue(hk, ix, name, &namelen, NULL, &type, value, &valuelen) == ERROR_SUCCESS) { strcat(info,name); strcat(info,"="); strcat(info,(char *)value); strcat(info,"\n"); ix++; namelen = sizeof(name); valuelen = sizeof(value); } } RegCloseKey(hk); } int main(int argc, char **argv) { char info[12345]; strcpy(info,""); getinfo("SOFTWARE\\Microsoft\\Windows\\CurrentVersion", info); printf("%s\n", info); return 0; }
10. februar 2004 - 15:33
#2
Tak for svaret og sry jeg var lidt langsom.. Men..: Jeg vil have herfra: HKEY_CURRENT_USER -> skal jeg så bare ændre "if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, key, 0, KEY_QUERY_VALUE, &hk) == ERROR_SUCCESS)" til "if(RegOpenKeyEx(HKEY_CURRENT_USER, key, 0, KEY_QUERY_VALUE, &hk) == ERROR_SUCCESS)"?? Jeg kan nemlig ikke få den til at vise noget resultat.. (Og ja, jeg er sikker på at biblioteket findes). Det virkede ellers med din kode.
11. februar 2004 - 01:00
#3
På min Win2000 er der ingen værdier direkte under: HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion men det er der under: HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion Så jeg får intet skrevet ud hvis jeg bruger HKEY_CURRENT_USER
12. februar 2004 - 13:06
#4
Men.. På min WinXP er de fleste værdier i HKEY_CURRENT_USER (incl den jeg behøver!). Hmm.. nogen der kan hjælpe?
12. februar 2004 - 13:11
#5
Du skal bare rette HKEY_LOCAL_MACHINE og SOFTWARE\\Microsoft\\Windows\\CurrentVersion så de matcher det du skal bruge.
12. februar 2004 - 13:25
#6
Nu virker det første.. Må have stavet forkert før.. :( Men.. HVordan viser man EN enkelt værdi (der er nemlig 20 forskellige ca.)??
12. februar 2004 - 13:34
#7
RegQueryValue i stedet for RegEnumValue så vidt jeg husker.
12. februar 2004 - 13:44
#8
´Så kommer der for mange "arguments´" i funktionen...?
12. februar 2004 - 13:57
#9
Eksempel: #include <windows.h> #include <stdio.h> #include <string.h> void getinfo(char *key, char *name, char *info) { HKEY hk; if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, key, 0, KEY_READ, &hk) == ERROR_SUCCESS) { DWORD valuelen,type; BYTE value[1024]; valuelen = sizeof(value); if(RegQueryValueEx(hk, name, NULL, &type, value, &valuelen) == ERROR_SUCCESS) { strcpy(info,(char *)value); } } RegCloseKey(hk); } int main(int argc, char **argv) { char info[12345]; strcpy(info,""); getinfo("SOFTWARE\\Microsoft\\Windows\\CurrentVersion", "DevicePath", info); printf("%s\n", info); return 0; }
13. februar 2004 - 18:16
#10
Tak! Det var lige hvad der manglede! Send et svar for point..
13. februar 2004 - 18:18
#11
svar
Kurser inden for grundlæggende programmering