在uses中加入 “ TLHelp32,psapi ”;
function FindProcess(AFileName: string;var ID:Cardinal): boolean; var hSnapshot: THandle;//用于获得进程列表 lppe: TProcessEntry32;//用于查找进程 Found: Boolean;//用于判断进程遍历是否完成 begin Result :=False; hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//获得系统进程列表 lppe.dwSize := SizeOf(TProcessEntry32);//在调用Process32First API之前,需要初始化lppe记录的大小 Found := Process32First(hSnapshot, lppe);//将进程列表的第一个进程信息读入ppe记录中 while Found do begin if ((UpperCase(ExtractFileName(lppe.szExeFile))=UpperCase(AFileName)) or (UpperCase(lppe.szExeFile )=UpperCase(AFileName))) then begin ID:=lppe.th32ProcessID; Result :=True; end; Found := Process32Next(hSnapshot,lppe);//将进程列表的下一个进程信息读入lppe记录中 end; end; function GetProcessPath(ProcessID: DWORD): string; var Hand: THandle; ModName: Array[0..Max_Path-1] of Char; hMod: HModule; n: DWORD; begin Result:=''; Hand:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,False,ProcessID); if Hand>0 then try ENumProcessModules(Hand,@hMod,Sizeof(hMod),n); if GetModuleFileNameEx(Hand,hMod,ModName,Sizeof(ModName))>0 then Result:=ExtractFilePath(ModName); except end; end;
调用方法:
procedure TForm1.Button1Click(Sender: TObject); var Test:Dword; Path:string; begin FindProcess('Test.exe',Test); Path:= GetProcessPath(Test); ShowMessage(Path); end;
标签:delphi
发表评论