2014-07-04 20 views
1

我已经得到了WinOS窗口的句柄,例如。 的Internet Explorer窗口,在Qt.I做到了这样:m_hwndUnderCursor= WindowFromPoint(curPoint);如何在Qt中将eventFilter安装到WinOS窗口?

如何安装一个eventFilter到m_hwndUnderCursor通过QWidget::find(m_hwndUnderCursor)->installEventFilter(this);成功,这样我就可以看m_hwndUnderCursor在Qt中没有HOOK技术

我知道是因为m_hwndUnderCursor一个指向WinOS窗口的指针,所以QWidget :: find(m_hwndUnderCursor)总是返回NULL。 有没有办法做到这一点?

回答

3

一个简单的答案是:你不能这样做。

更详细的解答:

QObject::installEventFilter()作品立足于Qt的事件引擎(事件循环,事件传播,等等)。这是Qt内部的东西,这不适用于Qt应用程序之外的其他窗口。它只适用于窗口,这些窗口是您从中调用installEventFilter()的同一应用程序的一部分。

由于类似的原因,如果您尝试查找非Qt窗口,QWidget::find()将永远不会为您提供现有的QWidget结果。它仅适用于在您的Qt应用程序中创建的窗口。另请参阅:Can QWidget::find find widgets from a different process?

您必须使用本地Windows API处理它。

+0

Thanks.Native Windows API似乎是我唯一的选择。 – waterd