Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Pfad der eigenen Anwendung - ohne Application. Param... (https://www.delphipraxis.net/50838-pfad-der-eigenen-anwendung-ohne-application-param.html)

Black-Horse 7. Feb 2008 10:15

Re: Pfad der eigenen Anwendung - ohne Application. Param...
 
Application.Exename kannst du in dem fall verwenden

Luckie 7. Feb 2008 11:19

Re: Pfad der eigenen Anwendung - ohne Application. Param...
 
Zitat:

Zitat von Black-Horse
Application.Exename kannst du in dem fall verwenden

Was keinen Unterschied macht, da Application.Exename auch nur ParamStr(0) aufruft. Mit ParamStr0) sollte man immer den Pafd der aufrufenden Exe-Datei bekommen, egal ob sie von einer anderen Anwendung gestartet wurde oder nicht.

Olli 7. Feb 2008 21:38

Re: Pfad der eigenen Anwendung - ohne Application. Param...
 
Komplizierter wird es nur noch, wenn man die Situation hat, daß man den Pfad der DLL aus der aktuellen DLL haben will, man aber (weil bspw. ursprünglich aus einer Bibliothek stammend) hInstance (der DLL) nicht kennt, NULL nicht nutzen kann, GetModuleHandle(NULL) auch keinen Sinn macht. Die generischste und meines Erachtens nach beste Methode zum Ermitteln des Pfades des aktuellen Moduls (nicht der EXE selbst, sondern des Moduls in dem der Code ausgeführt wird) ist, eine statische Variable zu deklarieren (also nicht auf dem Stack ;)) und die Basisadresse des Moduls aus der Adresse dieser Variablen zu ermitteln. Alternativ zur statischen Variablen geht auch ein Pointer auf die aktuelle Funktion welche unten beschriebene beschriebene Methode implementiert.

Dazu wird MSDN-Library durchsuchenVirtualQuery benutzt. Erster Parameter ist die Adresse der statischen Variablen. Zweiter Parameter ist ein Zeiger auf eine MEMORY_BASIC_INFORMATION-Struktur, deren Member "BaseAddress" nach dem (erfolgreichen) Aufruf von MSDN-Library durchsuchenVirtualQuery nur noch in HMODULE/HINSTANCE gecastet werden muß und dann wirklich die korrekte Basisadresse enthält.

Delphi-Quellcode:
GetModuleFileName(HMODULE(mbi->BaseAddress), Puffer, Groesse);

thule 14. Feb 2008 15:37

Re: Pfad der eigenen Anwendung - ohne Application. Param...
 
Ich habe mein Problem mit Hilfe des Prozessmanagements gelößt:

Delphi-Quellcode:
uses
  PSAPI, TlHelp32;

function GetProcessExeName(hProcess: THandle): String;
var                                                                          
  ModuleEntry: TModuleEntry32;                                      
  hModuleEntry: THandle;                                                      
  ProcessId: Cardinal;
begin
  if hProcess = INVALID_HANDLE_VALUE then Exit;
  ProcessId := GetWindowThreadProcessId(hProcess);
  hModuleEntry := CreateToolHelp32Snapshot(TH32CS_SNAPMODULE, ProcessId);
  ModuleEntry.dwSize := SizeOf(TModuleEntry32);
  Module32First(hModuleEntry, ModuleEntry);
  Result := MOduleEntry.szExePath;
  CloseHandle(hModuleEntry);
end;  

//Bsp:
 EXE_Dir_String := ExtractFilePath(GetProcessExeName(0));
//scheint gut zu functionieren.
Gruß

SirThornberry 14. Feb 2008 15:43

Re: Pfad der eigenen Anwendung - ohne Application. Param...
 
@tn249: Warum darf es nicht Application.ExeName sein trotz dessen das du ExtractFilePath verwendest?

sirius 14. Feb 2008 17:13

Re: Pfad der eigenen Anwendung - ohne Application. Param...
 
Zitat:

Zitat von SirThornberry
@tn249: Warum darf es nicht Application.ExeName sein trotz dessen das du ExtractFilePath verwendest?

Ob der nach 2,5 Jahren noch antwortet :gruebel:

thule 14. Feb 2008 18:19

Re: Pfad der eigenen Anwendung - ohne Application. Param...
 
Zitat:

Zitat von SirThornberry
@tn249: Warum darf es nicht Application.ExeName sein trotz dessen das du ExtractFilePath verwendest?

Weil das "application" objekt in der forms-unit definiert ist?(kp) ^^

gruß.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:04 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz