%windir% in C++ [erledigt] BIG THX 2 VOLKARD



  • volkard schrieb:

    BYTE pfad[4711];
    strcpy(pfad,getWindowsPath());
    strcat(pfad,"\\SYS\\Porgramm.exe");
    

    danke, aber irgendwas hab ich immernoch falsch:

    std::string getWindowsPath() {
      char* buff = new char[MAX_PATH];
      std::string ret_val;
      if (GetWindowsDirectory(buff, MAX_PATH)) {
        ret_val = buff;
      }
      delete[] buff;
      return ret_val;
    } 
    
    int main()
    {
    
        HWND hwnd = FindWindow("ConsoleWindowClass",NULL);
        ShowWindow(hwnd,SW_SHOW); // console verstecken
    
        BYTE pfad[4711];
        strcpy(pfad,getWindowsPath());
        strcat(pfad,"\\SYS\\Porgramm.exe"); 	
        HKEY hkey;
        RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, 0);
        RegSetValueEx(hkey, "Programm", 0, REG_SZ, pfad, sizeof(pfad));
        RegCloseKey(hkey);
    }
    

    bekomm beim compilieren das:

    28 C:\Users\Florian\Desktop\Neuer Ordner\SYS\SYS\start.cpp no matching function for call to `strcpy(BYTE[4711], std::string)'

    note C:\Dev-Cpp\include\string.h:45 candidates are: char* strcpy(char*, const char*)

    29 C:\Users\Florian\Desktop\Neuer Ordner\SYS\SYS\start.cpp invalid conversion from `BYTE*' to `char*'

    29 C:\Users\Florian\Desktop\Neuer Ordner\SYS\SYS\start.cpp initializing argument 1 of `char* strcat(char*, const char*)'



  • statt

    BYTE pfad[4711]; 
        strcpy(pfad,getWindowsPath()); 
        strcat(pfad,"\\SYS\\Porgramm.exe");
    

    besser

    string pfad=getWindowsPath()+"\\SYS\\Porgramm.exe";
    

    und bei der verwendung wenn pfad nicht klappt pfad.c_str() nehmen.



  • volkard schrieb:

    statt

    BYTE pfad[4711]; 
        strcpy(pfad,getWindowsPath()); 
        strcat(pfad,"\\SYS\\Porgramm.exe");
    

    besser

    string pfad=getWindowsPath()+"\\SYS\\Porgramm.exe";
    

    und bei der verwendung wenn pfad nicht klappt pfad.c_str() nehmen.

    funzt fast, bekomm beim compilieren noch einen error und zwar den:

    32 C:\Users\Florian\Desktop\Neuer Ordner\SYS\SYS\start.cpp cannot convert `std::string' to `const BYTE*' for argument `5' to `LONG RegSetValueExA(HKEY__, const CHAR, DWORD, DWORD, const BYTE*, DWORD)'

    findet er im qellencode hier:

    RegSetValueEx(hkey, "Programm", 0, REG_SZ, pfad, sizeof(pfad));
    


  • Vielleicht

    RegSetValueEx(hkey, "Programm", 0, REG_SZ, pfad.c_str(), pfad.size());
    


  • volkard schrieb:

    Vielleicht

    RegSetValueEx(hkey, "Programm", 0, REG_SZ, pfad.c_str(), pfad.size());
    

    nee, spuck der compiler den error aus:

    32 C:\Users\Florian\Desktop\Neuer Ordner\SYS\SYS\start.cpp invalid conversion from `const char*' to `const BYTE*'

    32 C:\Users\Florian\Desktop\Neuer Ordner\SYS\SYS\start.cpp initializing argument 5 of `LONG RegSetValueExA(HKEY__, const CHAR, DWORD, DWORD, const BYTE*, DWORD)'



  • Mit Gewalt vielleicht.

    RegSetValueEx(hkey, "Programm", 0, REG_SZ, reinterpret_cast<BYTE*>(pfad.c_str()), pfad.size());
    


  • volkard schrieb:

    Mit Gewalt vielleicht.

    RegSetValueEx(hkey, "Programm", 0, REG_SZ, reinterpret_cast<BYTE*>(pfad.c_str()), pfad.size());
    

    anscheinend gewalt auch keine lösung xD

    error:

    32 C:\Users\Florian\Desktop\Neuer Ordner\SYS\SYS\start.cpp reinterpret_cast from type `const char*' to type `BYTE*' casts away constness

    vielleicht erst convertieren?
    http://dotnet-snippets.de/dns/string-in-byte-array-und-zurueck-wandeln-SID67.aspx



  • Vielleicht const vergessen.

    RegSetValueEx(hkey, "Programm", 0, REG_SZ, reinterpret_cast<BYTE const*>(pfad.c_str()), pfad.size());
    


  • volkard schrieb:

    Vielleicht const vergessen.

    RegSetValueEx(hkey, "Programm", 0, REG_SZ, reinterpret_cast<BYTE const*>(pfad.c_str()), pfad.size());
    

    jaaaaaaaaaaaabadabadoooooooooooooooooo
    daaaaaaaaanke 🙂 🙂 🙂 🙂 🙂 🙂
    du kannst dir garnicht vorstellen wie ich mich grad freue 😃
    big thx volkard



  • hätt noch ne frage, wenn jemand zeit hat 🙂
    wie kann ich nen string in ne pfadangabe mit "system" einbauen
    habs so probiert

    system(getWindowsPath()+"\\SYS\\del.exe");
    

    dabei kommt dann das raus:

    cannot convert `std::basic_string<char, std::char_traits<char>, std::allocator<char> >' to `const char*' for argument `1' to `int system(const char*)'

    jemand ne idee wie man den string zu char convertieren kann?



  • string command=getWindowsPath()+"\\SYS\\del.exe";//zusammenbasten, ergebnis ist ein std::string
    system(command.c_str());//mit .c_str() wird ein entsprechender nullterminierter char* geliefert.
    


  • volkard schrieb:

    string command=getWindowsPath()+"\\SYS\\del.exe";//zusammenbasten, ergebnis ist ein std::string
    system(command.c_str());//mit .c_str() wird ein entsprechender nullterminierter char* geliefert.
    

    wow, sehr elegant gelöst
    darauf wär ich ned gekommen 😃
    thx nomml


Anmelden zum Antworten