我们的应用程序(AppA)正在调用第三方应用程序(AppB)。我们正在将AppB的窗口模拟为应用程序的模式。
pseudo
while AppB_Running
If AppA_focused
SetForeGroundWindow(AppB_Hwnd)
HandleMessage
SetForegroundWindow(AppA_HWnd)
这已经进行了好多年没有发生任何事件,也就是说,直到我们开始推出Windows 10为止。我们开始收到报告说,当我们关闭AppB时,某个时候某个随机应用程序(AppC)成为了焦点(实际上,考虑到我们用户的技术专业知识方面,报告的内容更像“关闭AppB杀死AppA”,但我离题了。可以偶尔在开发机上重现该行为(<5%)(但在调试时还没有...)
到目前为止,测试结果表明AppC是在AppA之前关注的应用程序。
有没有一种方法可以确保在AppB关闭时AppA重新获得焦点?
即使AppA仅失去对AppB的关注,也可以重现该问题。 (AppA启动后,AppC永远不会被关注)
答案 0 :(得分:0)
虽然这不能直接回答我最初的问题,但确实可以为该问题提供更多的见解,并且可能对其他人有用。
问题的一部分是对我们的监督。更具体地说,我们获得AppB_HWnd的方式。我们基本上选择了遇到的第一个顶级窗口。在我们当前的测试案例中,该窗口恰好是不可见的窗口(“ MSCTFIME UI”)。在不可见窗口上调用SetForegroundWindow似乎本身不会引起问题,Windows似乎只是将进程的可见窗口之一放在前面。当所说的进程没有可见的窗口时,事情似乎出现了问题。在我们的情况下,通常发生在AppB主窗口关闭到流程结束之间。
所以...不要在不可见的窗口上调用SetForegroundWindow
至于为什么我们在Win7中没有遇到任何麻烦?也许第一个窗口总是可见的。又或者说SetForegroundWindow的行为在那时有所不同。