tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
19
ZUGRIFFE
535
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von sunflower84
    sunflower84 sunflower84 ist offline Mitglied Brokat
    Registriert seit
    Apr 2005
    Ort
    Hettenleidelheim(Pfalz)
    Beiträge
    283
    Hallo

    Ich benutze den Dev C++ Compiler und würde gerne einen Registry Eintrag machen wenn die exe gestartet wurde.
    Unter HKEY_LOCAL_MACHINE\Software soll ein Ordern TEST1 mit Unterordner TEST2 erstellt werden. In Test2 ein KEY mit dem Namen TESTKEY und einen Wert als Pfad.
    Wie mache ich so etwas?

    Liebe Grüße
    Sunflower84
     

  2. #2
    Avatar von XeoX
    XeoX XeoX ist offline Mitglied Silber
    Registriert seit
    Aug 2007
    Beiträge
    86
     
    Wenn du jemandem auf die Brille trittst, erinnere ihn: Man sieht nur mit dem Herzen gut.
    (Antoine de Saint-Exupéry)

  3. #3
    Avatar von sunflower84
    sunflower84 sunflower84 ist offline Mitglied Brokat
    Registriert seit
    Apr 2005
    Ort
    Hettenleidelheim(Pfalz)
    Beiträge
    283
    Danke, werde ich mir mal anschauen.
    Hab da mal folgendes versucht:
    HKEY hKey;
    RegCreateKeyEx(HKEY_CURRENT_USER,"Test",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,0);

    Funktioniert auch. Ordner "Test" wurde angelegt. Aber solbald ich HKEY_CURRENT_USER in HKEY_LOCAL_MACHINE änder geht es nicht.
    Kann mir jemand sagen warum?
     

  4. #4
    Avatar von sunflower84
    sunflower84 sunflower84 ist offline Mitglied Brokat
    Registriert seit
    Apr 2005
    Ort
    Hettenleidelheim(Pfalz)
    Beiträge
    283
    Mit "Software" vor Test klappt es
     

  5. #5
    Avatar von sunflower84
    sunflower84 sunflower84 ist offline Mitglied Brokat
    Registriert seit
    Apr 2005
    Ort
    Hettenleidelheim(Pfalz)
    Beiträge
    283
    Hab das mal so gemacht:
    RegCreateKeyEx(HKEY_LOCAL_MACHINE,"Software\\Test1\\Test2",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCES S,NULL,&hKey,0);
    const unsigned char valueData[] = "C:\\";
    RegSetValueEx(hKey,"TESTKEY",0,REG_SZ,valueData,sizeof(valueData));

    Funktioniert auch super. Aber hab noch ein Problem. Der value der momentan "C:\\" heißt, soll der Pfad sein, wo sich die exe gerade befindet die aufgerufen wurde.Wie gebe ich das an?

    Liebe Grüße
    Sunflower84
     

  6. #6
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Die API-Funktion "GetModuleFileName()" liefert dir den vollständigen Pfad deiner EXE.
    Ähnliche Themen wurden im Forum schon behandelt, also einfach mal suchen.

    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  7. #7
    Avatar von sunflower84
    sunflower84 sunflower84 ist offline Mitglied Brokat
    Registriert seit
    Apr 2005
    Ort
    Hettenleidelheim(Pfalz)
    Beiträge
    283
    Das habe ich auch schon gemacht und zwar so:
    char str[MAX_PATH];
    GetModuleFileName(NULL,str,MAX_PATH);

    Wenn ich aber jetzt MAX_PATH valueData[] zuweise, dann bekomme ich einen Fehler.

    Liebe Grüße
    Sunflower84
     

  8. #8
    Avatar von sunflower84
    sunflower84 sunflower84 ist offline Mitglied Brokat
    Registriert seit
    Apr 2005
    Ort
    Hettenleidelheim(Pfalz)
    Beiträge
    283
    Also ich habe nichts gefunden.
    Nur das es mit GetModuleFileName geht. Aber wie weise ich der Variablen valueData[] den Wert zu?
     

  9. #9
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Nimm doch gleich "str":
    Code cpp:
    1
    2
    3
    4
    5
    6
    
    RegSetValueEx( hKey,
                   "TESTKEY",
                   0,
                   REG_SZ,
                   reinterpret_cast<CONST BYTE *>(str),
                   str.strlen() );
    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  10. #10
    Avatar von sunflower84
    sunflower84 sunflower84 ist offline Mitglied Brokat
    Registriert seit
    Apr 2005
    Ort
    Hettenleidelheim(Pfalz)
    Beiträge
    283
    Wenn ich das so mache bekomme ich folgende Fehlermeldung:
    request for member strlen in str, which is of non-class type char[260]

    Gruß
    Sunflower84
     

  11. #11
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Liegt wohl an der Hitze
    Muss natürlich heißen :
    Code :
    1
    
    strlen(str)
    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  12. #12
    Avatar von sunflower84
    sunflower84 sunflower84 ist offline Mitglied Brokat
    Registriert seit
    Apr 2005
    Ort
    Hettenleidelheim(Pfalz)
    Beiträge
    283
    Super, danke das klappt.
    Hab aber noch ein Problem.
    Der Pfad wird von einem Wizard in der Registry ausgelesen und angezeigt. Habe aber gerade gemerkt das er nur den Pfad auslesen kann
    wenn 2 \\ zwischen den Ebenen sind. Also C:\\... usw. Dann darf die exe an sich nicht mit in den Pfad rein, sondern anstelle der exe
    noch ein bestimmter Ordnername.
    Ist so etwas überhaupt möglich?
    Vielen Dank für eure Hilfe.

    Gruß
    Sunflower84
     

  13. #13
    Avatar von sunflower84
    sunflower84 sunflower84 ist offline Mitglied Brokat
    Registriert seit
    Apr 2005
    Ort
    Hettenleidelheim(Pfalz)
    Beiträge
    283
    Hab gerade die Funktion strcat() gefunden, mit der kann ich meinen Ordnernamen anhängen.
    Jetzt müsste man den Pfad noch irgendwie escapen und die Programm exe aus dem Pfad entfernen.
    Bin für jede Hilfe dankbar

    Gruß
    Sunflower84
     

  14. #14
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Hallo,

    du musst den String dafür zerlegen, d.h. den Teil mit der exe hinten abschneiden und stattdessen den Ordner dort einsetzen.
    Wenn ich dich richtig verstanden habe, müsste das so funktionieren:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    #include <string>
     
    // ...
     
    char buffer[MAX_PATH];
    GetModuleFileName(NULL, buffer, MAX_PATH);
     
    std::string str(buffer);
    str = str.substr(0, str.find_last_of("\\") + 1) + "Anderer Ordner\\";
     
    // ...
     
    RegSetValueEx( hKey,
                   "TESTKEY",
                   0,
                   REG_SZ,
                   reinterpret_cast<CONST BYTE *>(str.c_str()),
                   str.size() );
    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  15. #15
    Avatar von sunflower84
    sunflower84 sunflower84 ist offline Mitglied Brokat
    Registriert seit
    Apr 2005
    Ort
    Hettenleidelheim(Pfalz)
    Beiträge
    283
    Vielen Dank. Das klappt jetzt bis auf escaped. In der regestry wird nur ein "\" angezeigt. Deshalb kann der Wizard immer noch nicht den Pfad auslesen.

    Gruß
    Sunflower84
     

Ähnliche Themen

  1. [C++]Registry Eintrag
    Von Bumbbleman im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 02.10.09, 18:00
  2. VB 6 Registry Eintrag löschen
    Von nicok im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 15.10.06, 14:41
  3. Hardwarekey Eintrag in Registry geändert...
    Von Wholy im Forum VisualStudio & MFC
    Antworten: 5
    Letzter Beitrag: 30.04.04, 16:05
  4. Registry eintrag aktivieren!
    Von MWA im Forum VisualStudio & MFC
    Antworten: 7
    Letzter Beitrag: 29.04.04, 14:06
  5. [C++] Eintrag der Registry auslesen
    Von enrique im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 15.05.03, 01:39