Avatar billede brixz Nybegynder
30. oktober 2003 - 00:33 Der er 34 kommentarer og
1 løsning

Hiv information ud af Windows registreringsdatabase

Jeg ville gerne vide om man kunne lave en automatiseret program der automatisk hiver bestemte grene eller værdier ud af regedit.

dvs. uden at man skal ind i regedit og finde frem til den rigtige gren for derefter at trykke på exporter.

der må være en måde man kan lave en automatiseret exportering.

enten med et batch program eller noget andet?
Avatar billede arne_v Ekspert
30. oktober 2003 - 00:36 #1
Ja.

BAT duer ikke til det

C++ kan bruges

Delphi kan bruges

formentligt også VB
Avatar billede brixz Nybegynder
30. oktober 2003 - 00:42 #2
okay arne igen

det er efterhånden kun dig der besvarer mine spørgsmål hehe


kunne du give et lille hint til hvordan jeg laver dette i c++?
Avatar billede arne_v Ekspert
30. oktober 2003 - 00:45 #3
Avatar billede arne_v Ekspert
30. oktober 2003 - 00:45 #4
Det kan godt være lidt tricky nogen gange at få det til at virke.

Men det er lavet utallige gange og formentlig kan du finde noget eksempel kode.
Avatar billede brixz Nybegynder
30. oktober 2003 - 00:58 #5
Jeg tror jeg har fundet noget her:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/regsavekey.asp
men jeg ved ikke rigtig om det er c++ kode eller noget der skal ind i en .reg fil? kan du hjælpe mig ud her?
Avatar billede arne_v Ekspert
30. oktober 2003 - 01:01 #6
Det er C++ (faktisk er det C men det virker jo også i C++)
Avatar billede brixz Nybegynder
30. oktober 2003 - 01:10 #7
#include <conio.h>
#include <stdio.h>

void main(void){

LONG RegSaveKey(
  HKEY [HKEY_CURRENT_USER],
  LPCTSTR blah.txt,
  LPSECURITY_ATTRIBUTES null
);

}

---
hmm
Avatar billede brixz Nybegynder
30. oktober 2003 - 01:11 #8
jeg får kun fejl når jeg prøver at compile dette
Avatar billede brixz Nybegynder
30. oktober 2003 - 01:30 #9
Hvis du gider/kan lave en til mig vil jeg meget gerne give dig points for det. eller hvis du vil hjælpe mig med det er jeg meget taknemmelig.

note: jeg er ikke grådig med points ;)

det kan også godt være denne man skulle bruge:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/shlwapi/registry/shgetvalue.asp
Avatar billede arne_v Ekspert
30. oktober 2003 - 07:45 #10
Det er kun en funktions prototype.

Jeg kan godt prøve at lave et eksempel.

I aften.
Avatar billede soreno Praktikant
30. oktober 2003 - 09:52 #11
Jeg har et eksempel liggende, der hiver listen af installeret software ud:

#include <windows.h>
#include <stdio.h>

void getInstalledSoftware(char *info)
{
  HKEY hKey_root;
  long hKey_root_result;

  hKey_root_result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", 0, KEY_ENUMERATE_SUB_KEYS, &hKey_root);

  if(hKey_root_result == ERROR_SUCCESS)
  {
      int counter = 0;
      char buffer[1024] = "";

      while(RegEnumKey(hKey_root, counter, buffer, sizeof(buffer)) == ERROR_SUCCESS)
      {
        HKEY hKey_query;
        long hKey_query_result;
        char hKey_query_buffer[1024];
        DWORD hKey_query_buffer_size = sizeof(hKey_query_buffer);
        hKey_query_result = RegOpenKeyEx(hKey_root, buffer, 0, KEY_QUERY_VALUE, &hKey_query);
        if(hKey_query_result == ERROR_SUCCESS)
        {
            long DisplayName_result;
            long UninstallString_result;
            DisplayName_result = RegQueryValueEx(hKey_query, "DisplayName", 0, 0, (LPBYTE)&hKey_query_buffer, &hKey_query_buffer_size);
            UninstallString_result = RegQueryValueEx(hKey_query, "UninstallString", 0, 0, 0, 0);
            if((DisplayName_result == ERROR_SUCCESS) && (UninstallString_result == ERROR_SUCCESS))
            {
              strcat(info, "\r\n<name>");
              strcat(info, hKey_query_buffer);
              strcat(info, "</name>");
            }
        }
        counter++;
        RegCloseKey(hKey_query);
      }
  }
  RegCloseKey(hKey_root);
}


int main(int argc, char **argv)
{
    char buffer[12345];
    getInstalledSoftware(buffer);
    printf("%s\n", buffer);
    return 0;
}

Output (uddrag fra min liste):
<name>Mozilla (1.5)</name>
<name>NVIDIA Display Driver</name>
<name>Outlook Express Update Q330994</name>
<name>Windows XP Hotfix (SP2) Q322011</name>
<name>Windows Media Player Hotfix [See wm828026 for more information]</name>
<name>Easy Access Keyboard</name>
<name>Politikens Engelsk-Dansk Dansk-Engelsk Ordbog</name>
<name>Java 2 SDK, SE v1.4.2_01</name>
<name>Sound Blaster Live! Web 2K/XP</name>
<name>Java 2 Runtime Environment, SE v1.4.2_01</name>
<name>Nero - Burning Rom</name>
<name>Politikens Nudansk Ordbog med etymologi</name>
<name>Adobe Reader 6.0</name>
<name>Tweakui Powertoy for Windows XP</name>
Avatar billede arne_v Ekspert
30. oktober 2003 - 19:19 #12
Er Sørens eksempel nok - eller skal jeg lave et andet ?
Avatar billede brixz Nybegynder
30. oktober 2003 - 19:40 #13
Jeg kan ikke rigtig compile den jeg får en masse fejl
Avatar billede soreno Praktikant
30. oktober 2003 - 19:43 #14
Hvilke fejl og hvilken compiler ?
Avatar billede brixz Nybegynder
30. oktober 2003 - 19:44 #15
hvilken compiler bruger du søren?
Avatar billede soreno Praktikant
30. oktober 2003 - 19:47 #16
Jeg bruger mingw (den som følger med dev-cpp)
gcc version 3.2.3 (mingw special 20030504-1)
Avatar billede brixz Nybegynder
30. oktober 2003 - 19:47 #17
Jeg bruger Turbo C++ version 3.0
Avatar billede soreno Praktikant
30. oktober 2003 - 19:51 #18
Øhhh, den fra Borland ?

Det er da vist en DOS only compiler !
Avatar billede arne_v Ekspert
30. oktober 2003 - 19:52 #19
DOS og Win16
Avatar billede arne_v Ekspert
30. oktober 2003 - 19:53 #20
Så du skulle nok downloade mingw.
Avatar billede arne_v Ekspert
30. oktober 2003 - 19:53 #21
Avatar billede brixz Nybegynder
30. oktober 2003 - 21:01 #22
Nu har jeg kastet din kode ind i en .cpp fil og mit store problem er nu at få den compilet med MinGW. MinGW er jo commandline styret, hvor turbo c++ er mere notepad agtigt med en menu linje.

hvordan compiler jeg min .cpp fil med MinGW?
Avatar billede arne_v Ekspert
30. oktober 2003 - 21:04 #23
C:
  gcc foobar.c -o foobar.exe

C++:
  g++ foobar.cpp -o foobar.exe
Avatar billede brixz Nybegynder
30. oktober 2003 - 21:10 #24
****************************************************
C:\MinGW\bin>g++ regedit.CPP -o regedit.exe
regedit.CPP:50:2: warning: no newline at end of file

C:\MinGW\bin>gcc regedit.c -o regedit.exe
regedit.c:50:2: warning: no newline at end of file

C:\MinGW\bin>
****************************************************

virker den hos dig?
Avatar billede arne_v Ekspert
30. oktober 2003 - 21:14 #25
Det er kun en warning d.v.s. EXE filen er OK.
Avatar billede arne_v Ekspert
30. oktober 2003 - 21:15 #26
Hvis du vil af med den går du ned i bunden af filen efter
sidste } og laver et ekstra linie-skift.
Avatar billede brixz Nybegynder
30. oktober 2003 - 21:20 #27
ja det er rigtig det er bare mig der ikke lige kikkede efter om den havde lavet en exe fil, men det har dem.

og den virker, men det er bare ikke lige sådan en jeg skal bruge.
Den jeg skal bruge skal også kunne sætte det ind i en fil. (.txt .reg .bak whatever)

Den exporterer jo ikke noget. Den viser bare hvad værdierne er i bestemte grene. og når du lukker vinduet glemmer den det igen.
eller den lukker vinduet med det sammen man åbner den hvis ikke man gør det fra commando prompten.
Avatar billede arne_v Ekspert
30. oktober 2003 - 21:23 #28
Så skal programmet bare ændres til at skrive til en fil.

Eller du kan bruge:

program > output.fil
Avatar billede brixz Nybegynder
30. oktober 2003 - 21:38 #29
Næ den sidste virker vist ikke.

C:\MinGW\bin>regedit.exe test.txt
denne udskriver ikke noget i test.txt

vil du hjælpe mig med at lave en der udskriver til en fil?

for så opretter jeg lige et nyt spm med flere points i :)
Avatar billede brixz Nybegynder
30. oktober 2003 - 21:39 #30
Hov ">" er vist vigtig at huske
Avatar billede arne_v Ekspert
30. oktober 2003 - 21:41 #31
Hvis du fortælle rhvordan output skal se ud, så skal jeg
gerne customize output (det vil Søren sikkert også gerne).
Avatar billede brixz Nybegynder
30. oktober 2003 - 22:00 #32
Jo tak. Den skal kunne exportere en Streng

det er lige meget hvordan output ser ud. bare den har den data der er i strengen.

et eksempel ville være:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion]
og så de strenge der er herinde skulle den kunne exportere f.eks.

CommonFilesDir = c:\programmer\blabla
WallPaperDir = c:\billeder
Avatar billede brixz Nybegynder
30. oktober 2003 - 22:09 #33
Den Søren har lavet kan kun se undermapperne. Den kan ikke se selve strengene.
Avatar billede arne_v Ekspert
30. oktober 2003 - 22:16 #34
Jeg prøver lige at bixe noget.
Avatar billede brixz Nybegynder
30. oktober 2003 - 22:17 #35
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
Computerworld tilbyder specialiserede kurser i database-management

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