我有2个窗口,我想知道哪个窗口位于另一个窗口的顶部? 我尝试使用GetWindowLong测试并比较结果但没有机会。
LONG wndState1 = ::GetWindowLong(handler1, GWL_EXSTYLE);
LONG wndState2 = ::GetWindowLong(handler2, GWL_EXSTYLE);
两个结果都等于256。
编辑:在下面的图片中我有一个记事本的对话框++位于FileZilla之上,我如何通过代码获取。
有诀窍吗?
感谢你
答案 0 :(得分:-2)
GetWindowLong
用于检索特定窗口的样式信息。
要获得最顶层的窗口,请使用
HWND WINAPI GetForegroundWindow(void);
您仍然需要知道您感兴趣的进程的窗口句柄(HWND),以便您可以找出拥有前台窗口的进程。
请注意,此API只能返回用户正在与之交互的窗口(或最近与之交互过的窗口)。
更新:
我同意Remy的观点,即没有任何API可以做到这一点。我能想到的唯一方法是安装一个全局钩子并拦截某些消息(例如WM_ACTIVATE,WM_SETFOCUS等)。由于您还将检索消息的时间戳,因此可以很容易地推断哪个窗口位于任何其他窗口的顶部。这将要求您编写一个DLL,但这样做相对简单。虽然我认为它会起作用(我已经编写了一个全局钩子但从未用它来查找窗口的z顺序),但我无法保证这是可行的。