哪个窗口在另一个上面

时间:2017-12-15 16:02:23

标签: c++ winapi

我有2个窗口,我想知道哪个窗口位于另一个窗口的顶部? 我尝试使用GetWindowLong测试并比较结果但没有机会。

    LONG wndState1 = ::GetWindowLong(handler1, GWL_EXSTYLE);
    LONG wndState2 = ::GetWindowLong(handler2, GWL_EXSTYLE);

两个结果都等于256。

编辑:在下面的图片中我有一个记事本的对话框++位于FileZilla之上,我如何通过代码获取。

有诀窍吗?

感谢你

My Image

1 个答案:

答案 0 :(得分:-2)

GetWindowLong用于检索特定窗口的样式信息。

要获得最顶层的窗口,请使用

HWND WINAPI GetForegroundWindow(void);

您仍然需要知道您感兴趣的进程的窗口句柄(HWND),以便您可以找出拥有前台窗口的进程。

请注意,此API只能返回用户正在与之交互的窗口(或最近与之交互过的窗口)。

更新:

我同意Remy的观点,即没有任何API可以做到这一点。我能想到的唯一方法是安装一个全局钩子并拦截某些消息(例如WM_ACTIVATE,WM_SETFOCUS等)。由于您还将检索消息的时间戳,因此可以很容易地推断哪个窗口位于任何其他窗口的顶部。这将要求您编写一个DLL,但这样做相对简单。虽然我认为它会起作用(我已经编写了一个全局钩子但从未用它来查找窗口的z顺序),但我无法保证这是可行的。