Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Programmverzeichnis herausfinden

chrholder / 4 Antworten / Baumansicht Nickles

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

bei Antwort benachrichtigen
PaoloP chrholder „Programmverzeichnis herausfinden“
Optionen

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);

Jedes mal wenn jemand "Cloud" sagt, verliert ein Engel seine Flügel.
bei Antwort benachrichtigen
chrholder Nachtrag zu: „Programmverzeichnis herausfinden“
Optionen

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

bei Antwort benachrichtigen
vergisses chrholder „Programmverzeichnis herausfinden“
Optionen

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

bei Antwort benachrichtigen
chrholder Nachtrag zu: „Programmverzeichnis herausfinden“
Optionen

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.

bei Antwort benachrichtigen