如何通过进程获取文件真实路径!!!!
昨天发了个贴,竟然没分。。。重发过!!!!!!
RT,我们可以通过一系列的API获取进程的路径,但是如果是像记事本,WORD文档,EXECL文档,WINDOWS图片浏览器等程序,我们得到的只是系统目录下的程序
如:NODEPAD。EXE ,返回来的结果是 c:\windows\notepad.exe,那有没有一种办法可以得知这个记事本到底是哪个目录下的哪个文件?
比如我打开的是e:\a.txt,通过枚举得来的却是 c:\windows\notepad.exe 这个路径,能不能得到 e:\a.txt这个路径?
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;
这个函数返回的无法实现我的要求!!!