InstallDate auslesen



  • #include  <iostream> 
    #include  <string> 
    #include  <windows.h> 
    
    using namespace std; 
    
    #define cls system("cls") 
    #define wait  system  ("pause>nul") 
    void  color(string  pColor) 
    { 
      string  cmdstr  = "color "  + pColor; 
      system(cmdstr.c_str()); 
    } 
    
    typedef unsigned  long  ulong; 
    typedef unsigned  char  uchar; 
    
    bool  RegReadValueString(  string &value_data, const HKEY  &hkey,  const char* value) 
    { 
      ulong val_type; 
    
      //  Typ des Wertes prüfen 
      RegQueryValueEx(  hkey, //  Schlüssel -ein 
                        value,  //  Wert  -ein 
                        0,  //  immer NULL  -ein 
                        &val_type, //  Typ des Wertes -aus 
                        0,  //  Puffer für Daten des Wertes -ein 
                        0 //  Größe des Puffers -aus 
                     ); 
    
      if( val_type  !=  REG_SZ  ) 
        return  false;  //  falls Werte-Typ !=  String 
    
      //  Daten lesen 
      ulong result; 
      ulong size  = 1;  //  Größe des Daten-Puffers 
      uchar *data = new uchar[1]; //  Daten-Puffer  ( Platz für 1 Zeichen => \0 ) 
    
      if( result  = RegQueryValueEx(  hkey, value,  0,  0,  data, &size  ) ) 
      { 
        delete  []  data; 
    
        if( result  !=  ERROR_MORE_DATA ) 
          return  false;  //  Falls Daten = "\0" 
    
        try 
        { 
          data  = new uchar[size];  //  Puffer  auf die richtige Größe bringen 
        } 
        catch(  bad_alloc ) 
        { 
          return  false;  //  falls Vergrößern des Puffers fehlschlägt 
        } 
    
        if( RegQueryValueEx(  hkey, value,  0,  0,  data, &size ) ) 
          return  false;  //  falls weitere Fehler auftreten 
      } 
      value_data  = (char*) data;  //  Daten in C-String-Parameter schreiben 
      delete  []  data; //  Daten-Array leeren 
      return  true; //  bei Erfolg 
    
    } //  RegDataToStr 
    
    int main() 
    { 
      HKEY  hkey; 
      string  status, name, domain, password;
    
      //  Schlüssel öffnen 
      if( RegOpenKeyEx( HKEY_LOCAL_MACHINE, //  Host-Key 
                        "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 
                          //  Unerschlüssel 
                        0,  //  immer NULL 
                        KEY_READ, //  Zugriffsberechtigungen zum öffnen 
                        &hkey //  HKEY-Handle 
                      ) 
        ) 
      { 
        cls; 
        color("c"); 
        cout  <<  "Fehler: HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\" 
              <<  "CurrentVersion\\Winlogon konnte nicht geoeffnet werden.\n" 
              <<  "beliebige Taste zum Beenden ...\n"; 
        wait; 
        exit(-1); 
      } 
    
      //  Daten lesen 
    
      //  Namen lesen 
      if( !RegReadValueString( name, hkey, "InstallDate" )  ) 
      { 
        cls; 
        color("c"); 
        cout  <<  "Fehler: InstallDate konnte nicht gelesen werden.\n"; 
        wait; 
        exit(-1); 
      } 
    
      //  Hauptmenü ausgeben 
      hm: 
    
      int choice; 
    
      cls; 
      cout   
            <<  "\t\tBenutzername:            " <<  name  <<  endl ;
    
            system("PAUSE");
      return  0; 
    }
    

    Wieso kann ich mit folgenden Code nicht das Installdate auslesen? jedoch alle anderen parts von diesem Unterschlüssel???



  • toxical schrieb:

    Wieso kann ich mit folgenden Code nicht das Installdate auslesen?

    Zeile 31 : "InstallDate" ist ein REG_DWORD und kein REG_SZ.



  • weisst du /jemand auf die schnelle n vorschlag wie ich aus dem unterschlüssel das installdate in bin/hex auslesen kann???

    oder wo man nachsehen kann?


  • Mod

    Indem Du eben berücksichtigst das RegQueryValueEx eben ein DWORD liefert. Und nicht nur REG_SZ!



  • #include <windows.h> 
    #include <stdio.h> 
    
    int main(int argc, char *argv[]) 
    { 
     HKEY hkey; 
    
     char szBuffer[255]; 
     char KeyValue[255]; 
    
     unsigned long lBufferSize = 255; 
    
     RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_READ, &hkey) ; 
     RegQueryValueEx(hkey, "InstallDate", NULL, NULL, KeyValue, &lBufferSize) ; 
     RegCloseKey(hkey) ; 
    
     printf("Wert des Schluessels: %s",KeyValue, "\n\nPress any key...") ; 
     getchar() ; 
    
      return 0;
    }
    

    ich hab das ganze jetzt vereinfacht... nur wenn ich das installdate auslesen will schreibt er irgendwelche zeichen... irgendwas kapier i net oder mach i falsch alles andere liest er....


  • Mod

    Mach bitte aus KeyValue ein DWORD!



  • lol



  • Martin Richter schrieb:

    Mach bitte aus KeyValue ein DWORD!

    jep genau, mein problem ist das ich nicht weiss wie 😕



  • toxical schrieb:

    Martin Richter schrieb:

    Mach bitte aus KeyValue ein DWORD!

    jep genau, mein problem ist das ich nicht weiss wie 😕

    #include <windows.h> 
    #include <stdio.h> 
    
    int main(int argc, char *argv[]) 
    { 
     HKEY hkey; 
    
     char szBuffer[255]; 
     DWORD KeyValue; 
    
     DWORD lBufferSize = 255; 
    
     RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_READ, &hkey) ; 
     RegQueryValueEx(hkey, "InstallDate", NULL, NULL, KeyValue, &lBufferSize) ; 
     RegCloseKey(hkey) ; 
    
     printf("Wert des Schluessels: %i",KeyValue, "\n\nPress any key...") ; 
     getchar() ; 
    
      return 0;
    }
    

    gibt aber nicht den richtigen wert aus.... der in der regy gespeichert ist!!



  • http://msdn2.microsoft.com/en-us/library/ms724911.aspx

    **lpData
    A pointer to a buffer that receives the value's data. This parameter can be NULL if the data is not required.

    lpcbData
    A pointer to a variable that specifies the size of the buffer pointed to by the lpData parameter, in bytes. When the function returns, this variable contains the size of the data copied to lpData.**



  • #include <conio.h> 
    #include <windows.h> 
    #include <stdio.h> 
    #include <tchar.h> 
    #include <iostream> 
    
    using namespace std; 
    
    int main(int argc, char *argv[]) { 
    
    // ############# 
    
    HKEY     m_hMasterKey     = HKEY_LOCAL_MACHINE;//Hauptschlüssel 
    LPCTSTR  m_lpSubKey     = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";//Schlüssel Pfad 
    LPCTSTR  m_lpValueName    = "InstallDate";//Schlüsselname der ausgelesen wird 
    
    HKEY hKey; 
    DWORD dwNumber = 0; 
    DWORD dwData = sizeof(DWORD); 
    RegOpenKey(m_hMasterKey, m_lpSubKey, &hKey);
    RegQueryValueEx(hKey,"InstallDate",0,0,(BYTE*)&dwNumber,&dwData);
    RegCloseKey(hKey) ;
    
    //    printf("Ausgabe: %i",szValue); 
    
        cout << dwNumber << endl;
    
    // ############## 
    
    printf ("\n Press any key..."); 
    
    getch(); 
    
    return 0; 
    
    }
    

    Jetzt bekomm ich den richtigen Wert... jetzt muss ich die Sekunden noch in ein vernünftiges Datum umwandeln...
    thx so far !!!!! :p


Anmelden zum Antworten