本文整理自网络,侵删。
研究delphi服务的路径,试了好几个方法 ,都没取出来,最后发现,要采用取DLL路径的方法
//一、获取Dll自身路径
//1)方法一:
Function GetDllPath(sDllName:string):string;
varModuleFileName:array[0..255] of char;
begin//{取得dll的实际位置}GetModuleFileName(GetModuleHandle(sDllName), @ModuleFileName[0], SizeOf(ModuleFileName));Result := ModuleFileName;end;
//2)方法二:
Function GetDllPath:string;
varModuleName:string;beginSetLength(ModuleName, 255);//取得Dll自身路径GetModuleFileName(HInstance, PChar(ModuleName), Length(ModuleName));Result := PChar(ModuleName);
end;
// 二、获取调用程序路径
Function GetExecutPath:string;
varModuleName:string;beginSetLength(ModuleName, 255);//取得调用Dll程序的路径GetModuleFileName(GetModuleHandle(nil), PChar(ModuleName), Length(ModuleName));Result := PChar(ModuleName);
end;
点击打开链接
Delphi遍历进程并获取进程路径
获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName
功能模块改良版:
unit UntModulePath;
interface
usesWindows, SysUtils, PsAPI;
//获取EXE、Dll模块名称 或 路径function GetModuleFileNameDef(GetPath: Boolean = True): string;
function GetWindowProcHandle(Wnd: HWND; GetPath: Boolean = True): string;
varDllPath: string;
implementation
function GetModuleFileNameDef(GetPath: Boolean = True): string;varModuleName: array [0..MAX_PATH - 1]of Char;beginFillChar(ModuleName, Length(ModuleName), 0);//取得Dll自身路径GetModuleFileName(HInstance, ModuleName, Length(ModuleName));
if GetPath thenResult := ExtractFilePath(StrPas(ModuleName))elseResult := StrPas(ModuleName);end;
function GetWindowProcHandle(Wnd: HWND; GetPath: Boolean = True): string;varpID: Cardinal;hProc: THandle;ModuleName: array [0..MAX_PATH - 1]of Char;begin Result := '';if Wnd= 0 thenExit;
FillChar(ModuleName, Length(ModuleName), 0);
GetWindowThreadProcessId(Wnd, pID);hProc:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, pID);if hProc= 0 thenExit;tryGetModuleFileNameEx(hProc, 0, ModuleName, Length(ModuleName));finallyCloseHandle(hProc);end;if GetPath thenResult := ExtractFilePath(StrPas(ModuleName))elseResult := StrPas(ModuleName);end;
initializationDllPath:= GetModuleFileNameDef;
end.
相关阅读 >>
Delphi启动/停止windows服务,启动类型修改为"自动"
Delphiwindows 下编译 exe 文件时把一个外部 txt 文件编译到 exe 里面
Delphi 解决idtcpclient和idtcpserver通信中文乱码问题
更多相关阅读请进入《Delphi》频道 >>