SetForegroundWindow doesn't work with minimize

2019-04-14 16:53发布

This question already has an answer here:

Couldn't find any good answer on this topic, so maybe someone can help me out. I'm making a small personal program where I want to bring a certain application to the foreground. It already works, but there is one small problem. When the process is minimized my code doesn't work. The process wont get showed on the foreground like it does when it is not minimized.

Here is a snippet of the code:

 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 //Not Found
            {
                MessageBox.Show("Window Not Found!");
            }
        }

1条回答
时光不老,我们不散
2楼-- · 2019-04-14 17:07

You're going to need to call ShowWindow before you try to set it as the foreground window.

Probably with SW_RESTORE;

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

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

pinvoke.net - showwindow has some example's on DllImport and using the function in C#.

查看更多
登录 后发表回答