[C/C++] Aus Windows Registrierung Schlüssel-Wert auslesen und vergleichen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Gimli_q, 15. Februar 2010 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  1. #1 15. Februar 2010
    Aus Windows Registrierung Schlüssel-Wert auslesen und vergleichen

    Hallo zusammen,

    ich hab folgenden Fall:
    - 3 Notebooks. Auf jedem Notebook ist ein Netzwerk-Profil-Manager installiert.
    Die Notebooks arbeiten an verschiedenen Standorten und synchronisieren
    Daten über das Netzwerk.

    Nun zum Problemfall:
    - Ich möchte ein Programm haben, das nur Synchronisiert wenn der Anwender in einem
    bestimmten Netzwerk hängt. Deshalb habe ich mir gedacht, ich suche in der Windows-Regedit
    nach einem Wert, wo man sieht welches Profil des Netzwerk-Profil-Managers aktiv ist.
    Und siehe da, gefunden! Nun bräuchte ich nur noch eine Abfrage in C/C++ oder in einer
    anderen Sprache geschrieben, die Abfrägt ob ein bestimmter Wert in einem Schlüssel exisiert
    oder nicht. Je nach dem soll dann das Synchronisations-Programm gestartet werden oder eben nicht.

    Ich hoffe ich habs verständlich geschrieben ;)

    Gruß,
    gimli_q
     

  2. Anzeige
    Heute: Deals & Sale mit stark reduzierten Angeboten finden.
  3. #2 15. Februar 2010
    AW: Aus Windows Registrierung Schlüssel-Wert auslesen und vergleichen

    Dafür brauchst du folgende API Funktionen:


    RegOpenKeyEx()

    RegQueryValueEx()
    RegCloseKey()

    Ein gutes Beispiel von daniweb.com:
    Code:
    #include <windows.h>
    #include <iostream>
    using namespace std;
    
    int main()
    {
     HKEY hKey = 0;
     char buf[255] = {0};
     DWORD dwType = 0;
     DWORD dwBufSize = sizeof(buf);
     const char* subkey = "Software\\Microsoft\\Office\\PowerPoint\\AddIns\\MultiMgrAddIn.AddInDesigner1";
    
     if( RegOpenKey(HKEY_LOCAL_MACHINE,subkey,&hKey) == ERROR_SUCCESS)
     {
     dwType = REG_SZ;
     if( RegQueryValueEx(hKey,"Description",0, &dwType, (BYTE*)buf, &dwBufSize) == ERROR_SUCCESS)
     {
     cout << "key value is '" << buf << "'\n";
     }
     else
     cout << "can not query for key value\n";
     RegCloseKey(hKey);
    
     }
     else
     cout << "Can not open key\n";
     cin.ignore();
     
     return 0;
    }
    
    greez
     
  4. #3 15. Februar 2010
    AW: Aus Windows Registrierung Schlüssel-Wert auslesen und vergleichen

    Danke dir schonmal! Das bezieht sich aber auf DWORD-Schlüssel oder? Ich brauch das Ganze für eine Zeichenfolge. Ist das ähnlich?
     
  5. #4 15. Februar 2010
    AW: Aus Windows Registrierung Schlüssel-Wert auslesen und vergleichen

    ne, das DWORD ist eigenlicht nur ein typedef für ein unsigned long:
    Code:
    typedef unsigned long DWORD;
    Der eigentliche Wert steht am Ende in buf (array aus chars) und die DWORDs (bzw. unsigned longs) sind nur für die größe des Arrays zuständig und für den Type des Schlüssels, der ausgelesen wird.
    Also befindet sich der ausgelesene Wert am Ende in dem buf.

    greez
     
  6. #5 15. Februar 2010
    AW: Aus Windows Registrierung Schlüssel-Wert auslesen und vergleichen

    Ich habs gerade anders anhand eines weiteren Beispiels dsa ich über Google gefunden habe gelöst:

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

    int main(int argc, char **argv)
    {
    unsigned char temp[99] = {""};
    unsigned long size = sizeof(temp);
    HKEY hKey;

    RegOpenKey(HKEY_CURRENT_USER, "Software\\..\\usw\\...", &hKey);
    RegQueryValueEx(hKey, "SCHLUESSEL", NULL, NULL, temp, &size);
    RegCloseKey(hKey);

    int ruckgabe_int = 0;
    ruckgabe_int = strcmp ( temp, "IRGENDEINWERT");

    if ( ruckgabe_int == 0 ) {

    system("C:\\Programme\\...");

    } else {

    printf("Das Programm wird nicht gestartet.");

    }

    return(0);

    }
     

  7. Videos zum Thema
Die Seite wird geladen...