提问——相同的程式名,怎么确定其中某一个的进程号PID?(50分)在以下网址中,Avan Lau(avan_lau)根据文件名查找对应进程号PID。http://topic.csdn.net/u/20090122/13/d923a394-7e4d-4b7f-92a3-db410ceb908e.htmlAvan 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分,如果有人回答的话)

解决方案 »

  1.   

    进程名本来就不是唯一的,而PId是唯一的,只能根据进程名找出一组PId,再根据其它条件筛选你要的那个PId,比如:主窗口标题、内存占用、启动时间等。
      

  2.   

    按樓上說法,若有窗體,可通過查找特定窗體的句柄,來確定進程id
    先hWnd := Findwindow(nil,formCaption),
    然后GetWindowThreadProcessID(hWnd,@dwProcessId); 取得進程id  
      

  3.   

    GetWindowThreadProcessID(hWnd,@dwProcessId);
      

  4.   

    GetWindowThreadProcessID(hWnd,@dwProcessId);
      

  5.   

    相同的程式名,怎么确定其中某一个的进程号PID?
    楼主的问题很有意思?说的不清不楚,请问你是怎么判断的。
    把你判断的思路写成程序不就可以了?
    你提出如此空泛的一个题目,大家根本不可能帮到你。