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

Posted

技术标签:

【中文标题】SetForegroundWindow 不适用于最小化进程[重复]【英文标题】:SetForegroundWindow doesn't work with minimized process [duplicate] 【发布时间】:2015-02-11 11:57:08 【问题描述】:

在这个话题上找不到任何好的答案,所以也许有人可以帮助我。我正在制作一个小型个人程序,我想将某个应用程序带到前台。它已经工作了,但是有一个小问题。当该过程最小化时,我的代码不起作用。进程不会像未最小化时那样显示在前台。

这是一个sn-p的代码:

public partial class Form1 : Form

    [DllImport("user32.dll")]
    static extern bool SetForegroundWindow(IntPtr hWnd);

    public Form1()
    
       InitializeComponent();
    

    private void button1_Click(object sender, EventArgs e)
    
        System.Diagnostics.Process[] p
            = System.Diagnostics.Process.GetProcessesByName("Client");

        if (p.Length > 0)
        
            SetForegroundWindow(p[0].MainWindowHandle);
        
        else
        
            MessageBox.Show("Window Not Found!");
        
    

【问题讨论】:

【参考方案1】:

在尝试将其设置为前景窗口之前,您需要调用 ShowWindow。

可能是SW_RESTORE:

 [DllImport("user32.dll")]
 [return: MarshalAs(UnmanagedType.Bool)]
 static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

 if (p.Length > 0)
 
   ShowWindow(p[0].MainWindowHandle, 9);
   SetForegroundWindow(p[0].MainWindowHandle);
 

PInvoke.net - ShowWindow 有一些关于DllImport 的示例并在 C# 中使用该函数。

【讨论】:

以上是关于SetForegroundWindow 不适用于最小化进程[重复]的主要内容,如果未能解决你的问题,请参考以下文章

SetForegroundWindow 没有设置焦点

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

setForegroundWindow 的使用方法有哪些?

SetForegroundWindow 没有激活我的窗口

KNN 分类器算法不适用于所有情况

使用 JNA SetForeGroundWindow