如何在没有焦点时可靠地找到前景窗口

Ed *_* S. 6 c# interop

所以,我认为这很简单,而且我错了.以下是该问题的简要说明:

我正在为我们的制造人员编写一个小应用程序,当他们单击系统托盘中的应用程序图标时,将抓取整个桌面和前台窗口的屏幕截图.目前,我在NotifyIcon的MouseMove事件中使用Win32方法"GetforegroundWindow"来保存前景窗口句柄并在Click事件中截取屏幕截图.

这有时会起作用,但是如果我很快点击图标,我实际上会捕获任务栏而不是前景窗口.我不知道为什么会发生这种情况(我明白任务栏是一个窗口,我不明白为什么有时它似乎在我点击之前在MouseMove中有焦点),而且我没有运气使用EnumWindows方法同样,可能是因为我不完全理解它是如何工作的.

看来,如果我能够仅使用窗口句柄获得每个窗口的z位置,那么使用EnumWindows解决这个问题就很容易了.然而,我还没有找到一种方法.

所以,我问你们; 你会如何写一个方法来可靠地定位前景窗口,因为它当时可能没有焦点?要么我的google-fu失败了,要么关于这方面的信息很少.提前致谢.

Jos*_*osh 1

任务栏与任何前台窗口一样有效。当您单击它时,它将暂时成为前台窗口。例如,如果您单击“开始”并按 Esc 键,它将成为前台窗口,直到您单击它为止。

您可以将GetWindow与 HWND_NEXT 一起使用,传入任务栏的窗口句柄。

没关系,由于任务栏是最顶层的窗口,GetWindow(或 GetNextWindow 等)的操作方式会有所不同。我建议重新审视EnumWindows解决方案,这可能是您最好的选择。