哪个窗口在另一个上面

问题描述 投票:0回答:1

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

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

两个结果都等于256。

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

这有诀窍吗?

谢谢

My Image

c++ winapi
1个回答
-2
投票

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

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

HWND WINAPI GetForegroundWindow(void);

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

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

更新:

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

© www.soinside.com 2019 - 2024. All rights reserved.