Hallo Leute
Könntet ihr mir kurz helfen? Ich suche einen Weg, den Pfad herauszufinden, in welchem sich das Programm befindet.
getcwd() nützt mir in diesem Fall nichts, da das Programm auch über eine Verknüpfung aufgerufen werden kann, und dann liefert getcwd() das Arbeitsverzeichnis der Verknüpfung...
Kann mir Jemand helfen?
Danke schon Im Voraus!
P.S. Ich programmiere in C/C++ oder mit Windows-API
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
in winbase.h
DWORD GetCurrentDirectory(DWORD dwcCurDir, LPSTSTR lpszCurDir)
----
Exämbel:
LPSTSTR lptoken;
if (GetCurrentDirectory(256, lptoken))
MessageBox(NULL, lptoken, "Verzeichniss", MB_OK);
else
MessageBox(NULL, "Fehler: Rückgabe ungleich 0", "Verzeichniss", MB_OK);
Diese Version hat allerdings auch den Fehler, dass, wenn ich eine Verknüpfung mache, und dort als Arbeitsverzeichnis z.B. C:\ angebe, dann "C:\" ausgegeben wird.
Das ist eben genau nicht das, was ich will...
Hi,
mittels
void _searchenv( const char *filename, const char *varname, char *pathname );
findest Du den Ort, von wo aus Dein Programm aufgerufen worden ist.
Das kann natürlich auch eine Verknüpfung auf die eigentliche Datei sein.
Parameter:
filename = argv[0], notfalls vorher mit splitpath den eigentlichen Namen
des Programms extrahieren.
varname = Environmentvariable PATH. (Achtung, case sensitive)
in pathname wird dann der komplette Programmname inklusive dem Pfad reingeschrieben.
Dazu muß diese Variable groß genug alloziert sein (_MAX_PATH aus stdlib.h)
Normalerweise haben Verknüpfungen die Dateiendung *.lnk.
Um die Eigenschaften einer Verknüpfung zu untersuchen
kannst Du entweder die Interfaces IShellLink und IPersistFile (C++)
oder die C Funktion SHGetFileInfo() nehmen.
Lies einfach mal unter
http://home.arcor.de/cpp_kurs/mfc/mfc/kap7/lektion2.htm
nach.
Gruss, vergisses
Wollte nur für Archivdurchsucher noch die richtige Lösung schreiben:
Man muss die API-Funktion GetCommandLine() verwenden, die den Pfad der exe-Datei als Zeiger zurückgibt, egal welches Arbeitsverzeichnis gerade gewählt ist.