Registry Eintrag

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
 
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
 
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:
C++:
#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
 
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
 
Muss da generell zweimal "\\" stehen oder nur an einer bestimmten Stelle? Schon ein sehr seltsames Verhalten des Wizards :suspekt:

Gruß
MCoder
 
Ja dann musst du die Backslashes vor Registry-Schreiben verdoppeln:
C++:
size_t k = 0;
while( (k = str.find("\\", k + 2)) != std::string::npos )
{
    str.replace(k, 1, "\\\\");
}
Gruß
MCoder
 
Hab das jetzt so gemacht aber funktioniert leider nicht:
Code:
      HKEY hKey;
      char buffer[MAX_PATH];
      GetModuleFileName(NULL, buffer, MAX_PATH);
           
      RegCreateKeyEx(HKEY_LOCAL_MACHINE,"Software\\Test1\\Test2",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,0);
      std::string str(buffer);
      str = str.substr(0, str.find_last_of("\\") + 1) + "TestOrdner\\";
      RegSetValueEx( hKey,"Testkey",0,REG_SZ,reinterpret_cast<CONST BYTE *>(str.c_str()),  str.size() );
     
      size_t k = 0;
      while( (k = str.find("\\", k + 2)) != std::string::npos) 
      {
          str.replace(k, 1, "\\\\");
      }

Gruß
Sunflower84
 
Zurück