相同的程式名,怎么确定其中某一个的进程号PID?(50分)

springcyq 2009-01-22 05:43:24
提问——相同的程式名,怎么确定其中某一个的进程号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分,如果有人回答的话)




...全文
320 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zshsuming 2009-02-16
  • 打赏
  • 举报
回复
呵呵``
simb 2009-02-10
  • 打赏
  • 举报
回复
相同的程式名,怎么确定其中某一个的进程号PID?
楼主的问题很有意思?说的不清不楚,请问你是怎么判断的。
把你判断的思路写成程序不就可以了?
你提出如此空泛的一个题目,大家根本不可能帮到你。
HeroicDragon 2009-02-09
  • 打赏
  • 举报
回复
GetWindowThreadProcessID(hWnd,@dwProcessId);
HeroicDragon 2009-02-09
  • 打赏
  • 举报
回复
GetWindowThreadProcessID(hWnd,@dwProcessId);
lonelyriver 2009-02-04
  • 打赏
  • 举报
回复
嗯 我想QQ号是筛选的依据吧
ahjoe 2009-01-23
  • 打赏
  • 举报
回复
根据你的要求,你需要提供更多条件,比如已登录的QQ号
zhuminghua 2009-01-23
  • 打赏
  • 举报
回复
进程名本来就不是唯一的,而PId是唯一的,只能根据进程名找出一组PId,再根据其它条件筛选你要的那个PId,比如:主窗口标题、内存占用、启动时间等。
springcyq 2009-01-23
  • 打赏
  • 举报
回复
自己顶一下
金卯刀 2009-01-23
  • 打赏
  • 举报
回复
按樓上說法,若有窗體,可通過查找特定窗體的句柄,來確定進程id
先hWnd := Findwindow(nil,formCaption),
然后GetWindowThreadProcessID(hWnd,@dwProcessId); 取得進程id

1,183

社区成员

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

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