如何取得指定进程的exe文件的路径?

dfspring 2005-03-06 11:32:53
如果我运行了一个名为program.exe的文件,如何根据program.exe这个进程名来获取这个文件的路径?望各位高手赐教!谢谢!
...全文
378 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
王集鹄 2005-03-10
  • 打赏
  • 举报
回复
//98下不支持PsApi,参考如下代码,已经在98下调试过

uses TlHelp32, PsApi;

function GetPathFileOfModule(mModuleName: string): string;
var
vProcSnap: THandle;
vProcess: THandle;
vProcessEntry32: TProcessEntry32;
vBuffer: array[0..MAX_PATH] of char;
T: string;
L: Integer;
begin
Result := '';
vProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
mModuleName := UpperCase(mModuleName);
vProcessEntry32.dwSize := SizeOf(ProcessEntry32);
if Process32First(vProcSnap, vProcessEntry32) then
while Process32Next(vProcSnap, vProcessEntry32) do
begin
vProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
False, vProcessEntry32.th32ProcessID);
try
if GetModuleFileNameEx(vProcess, 0, vBuffer, SizeOf(vBuffer)) <> 0 then
T := vBuffer
else T := vProcessEntry32.szExeFile;
L := Length(mModuleName);
if FileExists(T) and
(Pos(mModuleName, UpperCase(T)) = Length(T) - L + 1) and
(Copy(T, Length(T) - L, 1) = '\') then
begin
Result := T;
Break;
end;
finally
CloseHandle(vProcess);
end;
end;
CloseHandle(vProcSnap);
end; { GetPathFileOfModule }
gamaster 2005-03-10
  • 打赏
  • 举报
回复
ly_liuyang(Liu Yang)
我一直对你有种疑惑,大部分的帖子都有你的口水。俺要登录了你的http://lysoft.7u7.net看了,也看了你的简历,你的技术水平让俺刮目相看。
可是象你这样的高水平的人怎么会有这么多的时间来灌水呢,你的简历里写道:
-----------月薪要求: 全职:使用期4000,正式不低于5000 ----------------------------
你这样的水平还没找到如此好薪水的工作,我们这些虾米怎么混呀。。。
ly_liuyang 2005-03-10
  • 打赏
  • 举报
回复
呵呵
我的Blog都有的

9X?一早就淘汰了

http://lysoft.7u7.net
gamaster 2005-03-10
  • 打赏
  • 举报
回复
unsigned(僵哥)
的方法在98系统下测试未通过,怎么办
Fufay 2005-03-07
  • 打赏
  • 举报
回复
楼上不错。
僵哥 2005-03-07
  • 打赏
  • 举报
回复
uses
TlHelp32,psapi;
function GetPathFileofModule(ModuleName:String):String;
var
hProcSnap: THandle;
pProcess: THandle;
pe32: TProcessEntry32;
s: string;
buf:array[0..MAX_PATH] of char;
hMod:HMODULE;
cbNeeded:DWORD;
begin
hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
if hProcSnap = INVALID_HANDLE_VALUE then Exit;
pe32.dwSize := SizeOf(ProcessEntry32);
if Process32First(hProcSnap, pe32) = True then
while Process32Next(hProcSnap, pe32) = True do
begin
if uppercase(pe32.szExeFile)=uppercase(ModuleName) then
begin
pProcess:=OpenProcess(PROCESS_QUERY_INFORMATION or
PROCESS_VM_READ,
FALSE,
pe32.th32ProcessID);
if pProcess<>0 then
begin
if EnumProcessModules( pProcess,@hMod,sizeof(hMod),cbNeeded) then
begin
ZeroMemory(@buf,MAX_PATH+1);
GetModuleFileNameEx(pProcess, hMod,buf,MAX_PATH+1);
Result:=strpas(buf);
end;
end;
end;
end;
CloseHandle(hProcSnap);
end;
------------------------------------
调用方法:
ShowMessage(GetPathFileofModule('program.exe'));

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧