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



  • unskilled schrieb:

    jz erklär mir mal, wieso du nicht den stack nimmst!?

    bb

    Ist schnurz-piep-egal imho, das ist ja keine Funktion die man oft braucht, einmal
    aufrufen und dann zwischenspeichern... 🙂

    EDIT:
    Hier bitte:

    std::string getWindowsPath() {
      char buff[MAX_PATH];
      std::string ret_val;
      if (GetWindowsDirectory(buff, MAX_PATH)) {
        ret_val = buff;
      }
      return ret_val;
    }
    

    Jetzt aber Ruhe hier 😃



  • milan1612 schrieb:

    unskilled schrieb:

    jz erklär mir mal, wieso du nicht den stack nimmst!?

    bb

    Ist schnurz-piep-egal imho, das ist ja keine Funktion die man oft braucht, einmal
    aufrufen und dann zwischenspeichern... 🙂

    dafür die chance, dass sie bad_alloc wirft... es macht einfach keinen Sinn... leserlicher wirds dadurch auch nicht...



  • Weils noch niemand getan hat:

    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.



  • wenn ich versuche des so zu schreiben (für nen autostarteintrag)

    BYTE pfad[] = getWindowsPath() + "\\SYS\\Porgramm.exe";
    

    dann sagt mir devc++ compiler

    28 C:\Users\Florian\Desktop\Neuer Ordner\start.cpp initializer fails to determine size of `pfad'
    28 C:\Users\Florian\Desktop\Neuer Ordner\SYS\SYS\start.cpp invalid initializer

    kann mir da noch jemand helfen, dann geb ich au a rua 😉



  • 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.



  • 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 🙄



  • 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


Anmelden zum Antworten