将窗口焦点恢复到之前的所有者

我有一个应用程序,位于系统托盘,当双击打开一个窗口,相当标准; 然而,当你关上窗户时,我希望窗户我被打开之前被重点聚焦。

如果通过键盘快捷键popup我的窗口,我可以在窗口显示前使用GetForegroundWindow API调用,然后在窗口closures后使用SetForegroundWindow方法(使用第一个调用的值)恢复重点。 当您通过系统托盘打开窗口时,这不起作用,因为用户本质上已经使系统托盘成为焦点。

我已经尝试使用GetForegroundWindowGetWindowGetTopMostWindow的组合来尝试导航z顺序来查找系统托盘之后的第二个窗口(假设系统托盘已经跳到顶部,因此在逻辑上下一个将是原来的前面)。 虽然我没有取得任何成就,但是这些function的结果是无用的,因为它们似乎没有给我任何逻辑结构。

有没有人有任何想法,我怎么能做到这一点?

我曾经想过某种背景监视器,它只是坐在监视器前面的窗口并存储一个指针,但最好是片状的。

这是在Windows(我个人在x64 Server 2008)和.Net 3.5。

Solutions Collecting From Web of "将窗口焦点恢复到之前的所有者"

虽然这可能是一个不错的可用性功能,但是您可能知道使用Windows 7时,托盘在桌面上的位置将会不那么突出。

实际执行此操作的唯一方法是在应用程序获得焦点之前监视Windows消息并跟踪哪个窗口有焦点。 除了AFAIK之外,你可以做的不多。

我看了看所有的系统托盘图标,它们和你的程序有相同的行为。 与Windows焦点管理混淆是毛茸茸的,你可能想在尝试改变标准行为之前考虑两次(或更多)。

我这样做是为了回到以前的窗口

 SendKeys.Send("%{TAB}"); 

我知道这不是“解决方案”,而是在某种程度上达到目的。