请问如何通过已知的进程ID而得到该进程的句柄?(50分)

  • 主题发起人 yanyandt2
  • 开始时间
Y

yanyandt2

Unregistered / Unconfirmed
GUEST, unregistred user!
OpenProcess API寒暑
 
我用 findwindow 得到一个句柄

然后我用 Process32First,Process32Next API得到进程的ID,
然后用 OpenProcess 得到第2个句柄

为什么2个句柄不一样?
 
findwindow 返回的是顶级[red]窗口[/red]的句柄,只是进程一个窗口句柄罢了!
OpenProcess 得到的是进程的实例句柄,当然不一样了!
 
那我如何通过进程ID获得进程的顶级窗口句柄?
 
procedure TForm1.Button1Click(Sender: TObject);
var
myHwnd:THandle;
ProID:^Integer;
myHandle:THandle;
begin
myHwnd:=FindWindow(Nil,'Age of Empires II'); //得到窗口句柄
New(ProID);
GetWindowThreadProcessID(MyHwnd,ProID); //得到进程ID
myHandle:=OpenProcess(Process_All_Access,false,ProID^); //得到进程句柄
if myHandle=$24 then
TerminateProcess(myHandle,0);
end;
 
为什么要一样?
两个句柄是两个对同一对象的引用,
有必要相同吗?
只要表示同一个进程就行了
你用TerminateProcess看能不能都将她们关掉
就知道是不是同一个了
 
现在不是想关
目的是 通过进程ID获得窗口句柄,然后sendmessage给那个窗口
 
顶部