我有一个位于系统托盘中的应用程序,双击时会打开一个相当标准的窗口;然而,当你关闭窗口时,我希望在之前关注的窗口被打开以获得后焦距。
如果我通过键盘快捷键弹出我的窗口,我可以在窗口显示之前使用GetForegroundWindow
API调用恢复之前关闭的焦点,然后我的SetForegroundWindow
方法之后窗口关闭(使用第一个调用的值)以恢复焦点。当您通过系统托盘打开窗口时,这不起作用,因为用户基本上已使系统托盘成为焦点。
我尝试使用GetForegroundWindow
,GetWindow
和GetTopMostWindow
的组合来尝试导航z顺序以找到系统托盘后面的第二个窗口(继续假设系统托盘已跳到顶部,所以逻辑上下一个将是原始前端。我没有取得任何成功,这些功能的结果非常无用,因为它们似乎没有给我任何逻辑结构。
有没有人对如何实现这一目标有任何想法?
我曾考虑过某种背景观察者,它只是坐着并监视哪个是前窗并存储一个指向它的指针,但这最多只会是片状。
这是在Windows上(我个人在x64 Server 2008上)和.Net 3.5。
答案 0 :(得分:2)
虽然这可能是一个很好的可用性功能,但您可能知道,在Windows 7中,托盘将在桌面上获得一个(很少)突出的位置。
实际执行此操作的唯一方法是监视Windows消息并在应用程序获得焦点之前跟踪哪个窗口具有焦点。除了AFAIK之外,你无能为力。
答案 1 :(得分:2)
我这样做是为了回到上一个窗口
SendKeys.Send("%{TAB}");
我知道这不是'解决方案',而是在某种程度上达到目的。
答案 2 :(得分:1)
我查看了所有系统托盘图标,它们与您的程序具有相同的行为。与Windows焦点管理混淆是多毛的,在尝试更改标准行为之前,您可能需要三思而后行(或更多)。