gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:59:41 26 4
gpt4 key购买 nike

所以,我认为这很简单,但是,我错了。以下是问题的简化描述:

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

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

看起来,如果我能够仅使用窗口句柄获得每个窗口的 z 位置,那么使用 EnumWindows 就可以轻松解决这个问题。但是,我还没有找到这样做的方法。

所以,我问你们;考虑到前景窗口当时可能没有焦点,您将如何编写一种方法来可靠地定位前景窗口?要么我的 google-fu 失败了,要么相关信息很少。提前致谢。

最佳答案

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

<罢工>你可以使用 GetWindow HWND_NEXT 传入任务栏的窗口句柄。

没关系,因为任务栏是最顶层的窗口,GetWindow(或 GetNextWindow 等)将以不同方式运行。我建议重新访问 EnumWindows这可能是您最好的选择。

关于c# - 如何在没有焦点时可靠地找到前景窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2343885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com