SetForegroundWindow 没有激活我的窗口

Posted

技术标签:

【中文标题】SetForegroundWindow 没有激活我的窗口【英文标题】:SetForegroundWindow does not activate my window 【发布时间】:2013-04-11 08:39:12 【问题描述】:

我不知道为什么它不起作用?

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 存在。

【问题讨论】:

Acrobat.exe 更改为 Acrobat 它不工作是什么意思?例外?控制台中的“有问题”?请详细说明。 谢谢@ByteBlast,jordanhill123,是的,“出了点问题”,现在它消失了,但我的窗口仍然不会出现,也许我错了,但这种方法应该将所选进程的 Windows 放在所有其他 Windows 的顶部,对吗? 你的意思是,它现在没有说“Something wrong”,但窗口仍然不会转到前台? (当我认为 ByteBlast 有正确答案时,我刚刚取消了我在下面删除的答案) 哦,刚看到,Matthew Watson的回答,我觉得我错了,要不要删除这个问题? 【参考方案1】:

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

以下至少一项必须为真:

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

是这样吗?

详情请参阅the MSDN documentation。

【讨论】:

以上是关于SetForegroundWindow 没有激活我的窗口的主要内容,如果未能解决你的问题,请参考以下文章

将后台窗口激活到前台的方法(使用AttachThreadInput和SetForegroundWindow两个API)

SetForegroundWindow 没有设置焦点

SetForegroundWindow 在对话框窗口中使用时不起作用

使用 JNA SetForeGroundWindow

SetForegroundWindow 不适用于最小化进程[重复]

一些窗口API函数,比如SetForegroundWindow,SwitchToThisWindow