Delphi的Dll中获取文件路径

//一、获取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.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值