SetForegroundWindow不会激活我的窗口

时间:2013-04-18 09:38:15

标签: c# user32

我无法弄清楚它为什么不起作用?

static void ActivateApp(string processName)
{
    Process[] p = Process.GetProcessesByName(processName);

    // Activate the first application we find with this name
    if (p.Any()) SetForegroundWindow(p[0].MainWindowHandle);
    else
    {
        Console.WriteLine("Something wrong");
    }
}


    [STAThread]
    static void Main(string[] args)
    {
        ActivateApp("Acrobat.exe");
    }

输出:

  

出了点问题

但我确信Acrobat.exe存在。

1 个答案:

答案 0 :(得分:2)

SetForegroundWindow()是否真的有效,有一些奇怪的规则。

必须至少满足下列条件之一:

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

是这样的吗?

有关详细信息,请参阅the MSDN documentation