如果我运行了一个名为program.exe的文件,如何根据program.exe这个进程名来获取这个文件的路径?望各位高手赐教!谢谢!
解决方案 »
- 请问这个文件读写操作是什么意思
- delphi怎么读取tif文件,其中tif里面含有多通道,在photoshop里面可以看到
- 无故被扣了一分!!!
- 字符串的问题?
- 现在开发一个组件,组件中有一个类,类中有一个变量,该变量根据运行时的情况不同而不同,在组件中的另外一个文件中(unit),访问该类中
- 请教这样的效果是用了什么控件?多谢。
- 求助,如何把遗传算法接进一个优化调配过程,谢谢
- ISAPI的问题?
- 数据库的连接(BDE 怎样连接到 ACCESS)?
- 如何拖動窗口任何地方﹐都可以移動窗口﹐注意:窗口中的按鈕等還可以接受事件
- ORALCE中BLOB字段问题
- 如何导出别的程序里DBGRID中的数据??
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'));
的方法在98系统下测试未通过,怎么办
我的Blog都有的9X?一早就淘汰了http://lysoft.7u7.net
我一直对你有种疑惑,大部分的帖子都有你的口水。俺要登录了你的http://lysoft.7u7.net看了,也看了你的简历,你的技术水平让俺刮目相看。
可是象你这样的高水平的人怎么会有这么多的时间来灌水呢,你的简历里写道:
-----------月薪要求: 全职:使用期4000,正式不低于5000 ----------------------------
你这样的水平还没找到如此好薪水的工作,我们这些虾米怎么混呀
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 }