相同的程式名,怎么确定其中某一个的进程号PID?(50分)
提问——相同的程式名,怎么确定其中某一个的进程号PID?(50分)
在以下网址中,Avan Lau(avan_lau)根据文件名查找对应进程号PID。
http://topic.csdn.net/u/20090122/13/d923a394-7e4d-4b7f-92a3-db410ceb908e.html
Avan Lau(avan_lau)的回答如下——
var
FSnapshotHandle, ProcessHndle: THandle;
FProcessEntry32: TProcessEntry32;
ContinueLoop: BOOL;
ProcessID : integer;
ItemName : String;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
Result := True;
Try
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop)<>0 do
begin
ItemName := ExtractFileName(FProcessEntry32.szExeFile);
ProcessID := FProcessEntry32.th32ProcessID;
If UpperCase(ItemName) = 'aa.doc' Then//比較你打開的文件的名稱
Begin
ProcessHndle:=OpenProcess(PROCESS_ALL_ACCESS,BOOL(0),ProcessID);
End;
ContinueLoop :=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
Finally
CloseHandle(FSnapshotHandle);
End;
end;
我看了这段代码,有个疑问。
如果,我开了两个 QQ,那么,它们的进程名字都是 QQ.exe,它们的进程号 PID 是不一样的。
例如:QQ_A 对应的 PID_A=200,QQ_B 对应的 PID_B=100。
按照 Avan Lau(avan_lau)提供的方法,我通过 QQ.exe 来找对应的 PID 就会出现误差,
我要的是 QQ_A 的 PID_A ,但是,我找到的也许是 QQ_B 的 PID_B。
请问,这个怎么解决呢?谢谢!
备注:
因为,我这个人很笨,所以,我需要的是详细的代码,
而不是简单的提供一个函数让我自己去学习。
感谢!
是了,可以在 QQ 开启的时候(可能已经开启了另外一个QQ的情况下)就去获得 PID ,这个又怎么做呢?(另加20分,如果有人回答的话)