Avatar billede dang3r Nybegynder
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?
Avatar billede arne_v Ekspert
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;
}
Avatar billede dang3r Nybegynder
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.
Avatar billede bertelbrander Praktikant
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
Avatar billede dang3r Nybegynder
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?
Avatar billede arne_v Ekspert
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.
Avatar billede dang3r Nybegynder
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.)??
Avatar billede arne_v Ekspert
12. februar 2004 - 13:34 #7
RegQueryValue i stedet for RegEnumValue så vidt jeg husker.
Avatar billede dang3r Nybegynder
12. februar 2004 - 13:44 #8
´Så kommer der for mange "arguments´" i funktionen...?
Avatar billede arne_v Ekspert
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;
}
Avatar billede dang3r Nybegynder
13. februar 2004 - 18:16 #10
Tak! Det var lige hvad der manglede!
Send et svar for point..
Avatar billede arne_v Ekspert
13. februar 2004 - 18:18 #11
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester