Ermitteln



  • Wie kann ich folgende Verzeichnise ermitteln:
    System Verzeichnis
    Windows Verzeichnis
    Temporäre Verzeichnis
    Windows Programm Verzeichnis



  • GetWindowsDirectory();
    GetSystemDirectory();



  • Siehe: SHGetFolderPath
    mit den passenden CSIDL_x Konstanten...

    System Verzeichnis => CSIDL_SYSTEM
    Windows Verzeichnis => CSIDL_WINDOWS
    Temporäre Verzeichnis => GetTempPath
    Windows Programm Verzeichnis => entweder "CSIDL_PROGRAM_FILES_COMMON" oder "CSIDL_PROGRAM_FILES"



  • GetWindowsDirectory ➡ http://msdn2.microsoft.com/en-us/library/ms724454.aspx
    GetSystemDirectory ➡ http://msdn2.microsoft.com/en-us/library/ms724373.aspx
    GetTempPath ➡ http://msdn2.microsoft.com/en-us/library/aa364992.aspx
    oder:
    SHGetFolderPath ➡ http://msdn2.microsoft.com/en-us/library/ms647764.aspx ,
    siehe dazu auch: http://msdn2.microsoft.com/en-us/library/ms649274.aspx für die ID's der verschiedenen Verzeichnisse.

    Das bekommt man aber schnell heraus, wenn man mal in die MSDN guckt.

    Siehe: System Information Functions
    und: File Management Functions

    EDIT: Zuuuu spät 😞 ...



  • durch diese Funktionen (windows.h wird benötigt!):

    UINT GetSystemDirectory(  // Systemordner ermitteln (meistens C:\WINDOWS\system)
      LPTSTR lpBuffer,        // ein char* in den der Ordnername geschrieben wird
      UINT uSize              // maximale Länge des char*
    );
    
    UINT GetWindowsDirectory( // Windows-Ordner ermitteln(meistens C:\WINDOWS)
      LPTSTR lpBuffer,        // Parameter wie oben
      UINT uSize
    );
    
    DWORD GetTempPath(        // Ordner für Temporäre Dateienermitteln (ACHTUNG: Name endet mit einem Backslsh (\))
      DWORD nBufferLength,    // maximale Länge
      LPTSTR lpBuffer         // der char* in den geschrieben wird
    );
    

    wenn du mit Windows Programm Verzeichnis das aktuelle Verzeichnis meinst:

    DWORD GetCurrentDirectory(  // Aktuelles Verzeichnis ermitteln (endet nicht mit Backslash)
      DWORD nBufferLength,      // Parameter wie bei GetTempPath
      LPTSTR lpBuffer
    );
    

    oder aber du meinst den Ordner, in dem Windows-Programme installiert werden (meistens C:\Programme):

    // hierfür muss man shlobj.h einbinden
    HRESULT SHGetFolderPath(
        HWND hwndOwner,         // Das Besitzerfenster - kann NULL sein
        int nFolder,            // Ordner-Identifier
        HANDLE hToken,          // sollte NULL sein
        DWORD dwFlags,          // zusätzliche Flags (sollte SHGFP_TYPE_CURRENT sein)
        LPTSTR pszPath          // char* zur Ausgabe (ACHTUNG: sollte eine Länge von MAX_PATH haben)
    );
    

    und jetzt noch 1 Beispiel:

    #include <windows.h>
    #include <shlobj.h>
    
    void ShowDirectories(void) {
        char buf[MAX_PATH];
        char output[65536];
        GetSystemDirectory(buf, MAX_PATH);
        wsprintf(output, "Systemordner: %s\n", buf);
        GetWindowsDirectory(buf, MAX_PATH);
        wsprintf(output, "%sWindows-Ordner: %s\n", output, buf);
        GetTempPath(MAX_PATH, buf);
        wsprintf(output, "%sTemporärer Ordner: %s\n", output, buf);
        GetCurrentDirectory(MAX_PATH, buf);
        wsprintf(output, "%sAktuelles Verzeichnis: %s\n", output, buf);
        SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, SHGFP_TYPE_CURRENT, buf);
        wsprintf(output, "%sProgrammverzeichnis: %s\n", output, buf);
        // Mit SHGetFolderpath kann man auch die anderen Ordner ermitteln, dann braucht man andere CSIDL's
        // anderes Beispiel: System32
        SHGetFolderPath(NULL, CSIDL_SYSTEM, NULL, SHGFP_TYPE_CURRENT, buf);
        // Für mehr Informationen zu SHGetFolderPath rate ich, in der MSDN nachzulesen
        wsprintf(output, "%sSystem32-Ordner: %s\n", output, buf);
        MessageBox(NULL, output, "Verzeichnisse", MB_OK|MB_ICONINFORMATION);
    }
    
    int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
        ShowDirectories();
        return 0;
    }
    

    MfG DrakoXP

    PS: mist! zu lange getippt 😞


Anmelden zum Antworten