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.

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页