欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Delphi的Dll中获取文件路径

程序员文章站 2022-06-26 08:03:54
...
//一、获取Dll自身路径

//1)方法一:

Function GetDllPath(sDllName:string):string;

var
  ModuleFileName:array[0..255] of char; 

begin
  //{取得dll的实际位置}
  GetModuleFileName(GetModuleHandle(sDllName), @ModuleFileName[0], SizeOf(ModuleFileName));
  Result := ModuleFileName;
end;

//2)方法二:

Function GetDllPath:string;

var
  ModuleName:string;
begin
  SetLength(ModuleName, 255);
  //取得Dll自身路径
  GetModuleFileName(HInstance, PChar(ModuleName), Length(ModuleName));
   Result := PChar(ModuleName);

end;


//  二、获取调用程序路径

Function GetExecutPath:string;

var
  ModuleName:string;
begin
  SetLength(ModuleName, 255);
  //取得调用Dll程序的路径
  GetModuleFileName(GetModuleHandle(nil), PChar(ModuleName), Length(ModuleName));
   Result := PChar(ModuleName);

end;


点击打开链接

Delphi遍历进程并获取进程路径

获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName

功能模块改良版:

unit UntModulePath;

interface

uses
  Windows, SysUtils, PsAPI;

//获取EXE、Dll模块名称 或 路径
function GetModuleFileNameDef(GetPath: Boolean = True): string;

function GetWindowProcHandle(Wnd: HWND; GetPath: Boolean = True): string;

var
  DllPath: string;

implementation

function GetModuleFileNameDef(GetPath: Boolean = True): string;
var
  ModuleName: array [0..MAX_PATH - 1]of Char;
begin
  FillChar(ModuleName, Length(ModuleName), 0);
  //取得Dll自身路径
  GetModuleFileName(HInstance, ModuleName, Length(ModuleName));

  if GetPath then
    Result := ExtractFilePath(StrPas(ModuleName))
  else
    Result := StrPas(ModuleName);
end;


function GetWindowProcHandle(Wnd: HWND; GetPath: Boolean = True): string;
var
  pID: Cardinal;
  hProc: THandle;
  ModuleName: array [0..MAX_PATH - 1]of Char;
begin     
  Result := '';
  if Wnd= 0 then
    Exit;
    
  FillChar(ModuleName, Length(ModuleName), 0);

  GetWindowThreadProcessId(Wnd, pID);
  hProc:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, pID);
  if hProc= 0 then
    Exit;
  try
    GetModuleFileNameEx(hProc, 0, ModuleName, Length(ModuleName));
  finally
    CloseHandle(hProc);
  end;
  if GetPath then
    Result := ExtractFilePath(StrPas(ModuleName))
  else
    Result := StrPas(ModuleName);
end;

initialization
  DllPath:= GetModuleFileNameDef;

end.