将窗口带到前台的问题

时间:2013-08-13 21:22:49

标签: c# .net windows winapi

我有一个用户实际上没有关闭的应用程序 - 而不是关闭整个应用程序,主窗口被隐藏。然后,当用户再次启动相同的应用程序时,第二个实例与第一个(已在运行的)实例进行通信,第一个实例尝试将主应用程序窗口置于前台。

问题在于这大部分成功,但有时会失败。我已经完成了我的研究,似乎后台进程无法将他们的窗口带到前台,这有点合理。解决方案是从第二个实例调用AllowSetForegroundWindow(可以将窗口带到前台,因为用户已启动它)并为该程序的第一个实例授予权限。

我的问题是:如何确保我的代码有效?我问这个是因为我找不到检查AllowSetForegroundWindow调用是否有任何影响的方法。我不知道第一个实例何时无法设置前景窗口(因为它主要工作,很少没有),所以我不知道如何检查一切是否正常工作。任何想法?

1 个答案:

答案 0 :(得分:2)

AllowSetForegroundWindow()有一个返回码,您可以查看:

  

如果调用进程无法设置,则该函数将失败   前景窗口。

当您的应用启动时,应该能够设置前景窗口,因此AllowSetForegroundWindow() 成功,并且您现有应用的实例应该能够走到前面。

然而,保证无法一直有效。您所能做的就是尽可能地实施文档化的系统。在最糟糕的情况下,您现有的应用程序会在其他窗口后面打开,用户必须单击它才能将其带到前面。