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



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



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

    Das ginge meines Wissens nur, wenn der Typ des Registry-Keys REG_EXPAND_SZ ist. Ich habe halt das REG_SZ wörtlich genommen.

    Stefan.



  • Bei mir siehts jetzt so aus:

    #include <cstdlib>
    #include <mmsystem.h>
    #include <stdlib.h>
    #include <string> 
    
    std::string addPath(const char *progname) {
    
       std::string result;
       const char *env = std::getenv("WINDIR");
       if(env) result = env;
       else    result = "c:\\windows";
       result += '\\';
       result += progname;
       return result;
    } 
    
    int main()
    {
    
        HWND hwnd = FindWindow("ConsoleWindowClass",NULL);
        ShowWindow(hwnd,SW_HIDE);
    
        BYTE pfad[] = "Programm.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);
    }
    

    wo muss ich jetzt noch was machen?
    bitte help, ich hab keine ahnung 😞



  • gut, habs jetzt geschafft windir auszulesen
    geht so:

    char * pPath;
    pPath = getenv ("WINDIR");
    

    wie trag ich dass jetzt in den Pfad zu einem Programm, das beim autostart gestartet werden soll ein?



  • ZockerFloh7 schrieb:

    gut, habs jetzt geschafft windir auszulesen
    geht so:

    char * pPath;
    pPath = getenv ("WINDIR");
    

    ach echt? zähl mal nach, wie oft das hier schon geschrieben wurde...

    ZockerFloh7 schrieb:

    wie trag ich dass jetzt in den Pfad zu einem Programm, das beim autostart gestartet werden soll ein?

    was?



  • sorry man ich binn hald total anfänger
    ich hab jetzt 2 stungen gegooglt und langsam hat sich das ergeben...
    ich möchte die ermittelte "Windir" jetzt in nen pfad einbauen
    z.b. beim autostart, damit windows weiß wo des autostart file liegt
    so in der richtung:

    BYTE pfad[] = "windir\\SYS\\LanNetService.exe";
    

    aber so gehts nich und ich find keine lösung



  • #include <string>
    #include <cstdlib>
    
    std::string get_windows_path()
    {
      char* str = std::getenv("WINDIR");
      return str ? str : "C:/Windows";
    }
    

    Benutzung:

    #include <string>
    
    int main()
    {
      std::string path = get_windows_path() + "/SYS/LanNetService.exe";
    }
    

    Jz klüger als zuvor?

    bb



  • ZockerFloh7 schrieb:

    wtf is dat kompliziert, gehts irgendwie einfacher?
    hab bei microsoft sowas gefunden:

    UINT GetWindowsDirectory(
    LPTSTR lpBuffer,
    UINT uSize
    );
    

    weißt, bin anfänger und hab da mit codes wie deinen nen bissl probleme 😃

    Flo

    #include <iostream>
    #include <string>
    #include <windows.h>
    
    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() {
      std::cout << getWindowsPath() + "\\test.png" << std::endl;
    }
    


  • milan1612 schrieb:

    #include <iostream>
    #include <string>
    #include <windows.h>
    
    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() {
      std::cout << getWindowsPath() + "\\test.png" << std::endl;
    }
    

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

    bb



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


Anmelden zum Antworten