最小化后将窗口置于前台

7
我想知道如何将特定的窗口置于前台。 当窗口没有被最小化时,SetForegroundWindow函数是可以正常工作的!但是一旦窗口被最小化,SetForegroundWindow就不能正常工作了...
以下是我的代码:
        int IdRemoto = int.Parse(textBoxID.Text);

        Process[] processlist = Process.GetProcessesByName("AA_v3.3");

        foreach (Process process in processlist)
        {
            if (!String.IsNullOrEmpty(process.MainWindowTitle))
            {
                if (IdRemoto.ToString() == process.MainWindowTitle)
                    SetForegroundWindow(process.MainWindowHandle);  
            }
        }


[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
2个回答

15
您可以使用IsIconic() API 检查窗口是否被最小化,然后使用ShowWindow()来还原它:
public const int SW_RESTORE = 9;

[DllImport("user32.dll")]
public static extern bool IsIconic(IntPtr handle);

[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr handle, int nCmdShow);

[DllImport("user32.dll")]
public static extern int SetForegroundWindow(IntPtr handle);

private void BringToForeground(IntPtr extHandle)
{
    if (IsIconic(extHandle))
    {
        ShowWindow(extHandle, SW_RESTORE);
    }
    SetForegroundWindow(extHandle);
}

1
您可以使用ShowWindow与您已有的内容结合使用,这是带有一些修改的示例:
    int IdRemoto = int.Parse(textBoxID.Text);

    Process[] processlist = Process.GetProcessesByName("AA_v3.3");

    foreach (Process process in processlist)
    {
        if (!String.IsNullOrEmpty(process.MainWindowTitle))
        {
            if (IdRemoto.ToString() == process.MainWindowTitle)
            {
                ShowWindow(process.MainWindowHandle, 9);
                SetForegroundWindow(process.MainWindowHandle);  
            }
        }
    }


   [DllImport("user32.dll")]
   private static extern bool SetForegroundWindow(IntPtr hWnd);
   [DllImport("user32.dll")]
   private static extern bool ShowWindow(IntPtr hWind, int nCmdShow);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接