【问题标题】:Problems with bringing window to foreground将窗口置于前台的问题
【发布时间】:2013-08-13 21:22:48
【问题描述】:

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

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

我的问题是:如何确保我的代码有效?我问这个是因为我没有找到检查 AllowSetForegroundWindow 调用是否有任何效果的方法。我不知道第一个实例何时无法设置前景窗口(因为它大部分都可以工作,很少不工作),所以我不知道如何检查一切是否正常。有什么好办法吗?

【问题讨论】:

  • 有一个总是有效的肮脏把戏。这实际上是 .NET 框架中内置的一个技巧,将其提升为受支持的污垢。不是每个 C# 程序员都能deal with it,但绝望总是有帮助的。
  • @HansPassant:谢谢,很高兴知道所有技巧 :)

标签: c# .net windows winapi


【解决方案1】:

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

如果调用进程无法设置 前景窗口。

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

但是,没有办法保证这将一直有效。您所能做的就是尽可能地实施记录在案的系统。在最坏的情况下,您现有的应用程序在其他窗口后面打开,用户必须单击它才能将其带到前面。

【讨论】:

  • AllowSetForegroundWindow 确实返回 True,所以现在我假设一切都按预期工作。
猜你喜欢
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-16
  • 2010-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多