2011-05-07 91 views

回答

3

,目前前景焦点的应用程序是允许变化前景焦点只有一个。您需要使用SetForegroundWindow function来行使此权利。

文档中的“备注”部分包含的限制适用的清单:

系统限制哪些进程可以设置前台窗口。只有满足以下条件之一时,进程才能设置前景窗口:

  • 该进程是前台进程。
  • 该过程由前台进程启动。
  • 该进程收到最后一个输入事件。
  • 没有前台进程。
  • 正在调试前台进程。
  • 前景未锁定(请参阅LockSetForegroundWindow)。
  • 前台锁定超时已过期(请参阅SystemParametersInfo中的SPI_GETFOREGROUNDLOCKTIMEOUT)。
  • 没有菜单处于活动状态。

当用户使用另一个窗口时,应用程序无法强制窗口到前台。相反,Windows会闪烁窗口的任务栏按钮以通知用户。

真正的问题是为什么你需要这样做。更改前台应用程序很可能会让您陷入麻烦,无论是Windows放置还是用户的所有限制。这是一个非常用户敌对的行动,这是Windows近年来收紧它的原因之一。

+0

是不是有Qt方式?我的问题是:当用户按下设置时会打开一个新窗口,但如果他们没有观察它并再次按下设置,则设置窗口将保持返回,我想说:“嘿,我在这里。在你面前“。解决方法是先setVisibile(false),然后setVisible(true),但我不喜欢这个解决方案,它应该在没有关闭并重新打开的情况下弹出。我不能使用Windows API导致应用程序是跨平台的,不想制动那个。 – 2012-02-15 12:33:31

+0

raise()为我的问题工作... – 2012-02-15 12:42:22

+0

@Moraru:是的,这是相对简单的,因为设置窗口是由*您自己的*应用程序创建的。这里的问题是试图从*其他*应用程序(进程)激活窗口。 Windows试图阻止它,因为它曾经被开发者滥用。 – 2012-02-15 21:11:09

0

您可能想要从父进程中完成。使用SetForegroundWindow最简洁/最可靠的方法是从当前处于前台的进程调用它。