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



  • ZockerFloh7 schrieb:

    otze schrieb:

    otze schrieb:

    Bitte ließ dir ein gutes Buch zum Thema C++ durch, bevor du dich mit der WinAPI beschäftigst. Es schont dir und vor allem uns Nerven, wenn du zumindest grob weißt, was du tust.

    bin am lesen, aber ich brauch jetzt hald diese funktion für mein projekt, also bitte hilf mir doch kurz auf die sprünge 🙄

    Dadurch dass andere Dir den Code hinkotzen ist Dir auch nicht geholfen.. lerne es oder lass es.



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


  • ZockerFloh7 schrieb:

    camper schrieb:

    Warum nicht einfach

    BYTE pfad[] = "%windir%\\meinprogramm.exe";
    

    ? Der Bezug zu C++ erscheint mir allerdings als zu gering, als dass er das Posten in diesem Unterforum rechtfertigen würde.

    wo soll ich denn sonst sowas fragen?

    Im WinAPI-Unterforum: http://www.c-plusplus.net/forum/viewforum-var-f-is-4.html



  • C++Fr34k schrieb:

    ZockerFloh7 schrieb:

    otze schrieb:

    otze schrieb:

    Bitte ließ dir ein gutes Buch zum Thema C++ durch, bevor du dich mit der WinAPI beschäftigst. Es schont dir und vor allem uns Nerven, wenn du zumindest grob weißt, was du tust.

    bin am lesen, aber ich brauch jetzt hald diese funktion für mein projekt, also bitte hilf mir doch kurz auf die sprünge 🙄

    Dadurch dass andere Dir den Code hinkotzen ist Dir auch nicht geholfen.. lerne es oder lass es.

    hast ja recht aber bis ich mit lernen bei dem kapitel bin dauerts noch nen virtel bis halbes jahr, wenn nich länger...



  • Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • 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