【发布时间】:2010-03-26 18:33:37
【问题描述】:
我正在尝试获取当前聚焦窗口的 HWND 和 ThreadID。
通常 GetForegroundWindow() 然后调用 GetThreadProcessId() 会给我正确的信息。
但是在 IE8 的情况下,GetForegroundwindow() 的 HWnd 给了我 IE 框架的 HWND,但实际上焦点窗口(文档对象或 Internet Explorer_server)是不同的(在不同的进程中运行)。所以 GetForegroundWindow() 方法不起作用。
所以我使用了 GetGuiThreadInfo(DWORD tid) ,并将我从 GetForegroundWindow 获得的 threadId 传递给它。类似这样的东西;
DWORD tid = GetWindowThreadProcessId(GetForegroundWindow(),0);
GetGuiThreadInfo(tid,&guiThreadInfoObject);
HWND focus = guiThreadInfoObject.hwndFocus;
使用上述方法,我得到了正确的 Internet Explorer_server 对象的 HWND。 但是我不明白,即使 GetGuiThreadInfo() 正在获取不同进程(即 IE 框架)中的线程的 ThreadId ,为什么它能够让我获得有关位于不同进程和线程上的 Internet Explorer_server 对象的线程信息?
谢谢
【问题讨论】: