2014-12-12 7 views
0

Не удалось найти хороший ответ на эту тему, так что, может быть, кто-то может мне помочь. Я создаю небольшую личную программу, в которой я хочу вывести на передний план определенное приложение. Это уже работает, но есть одна небольшая проблема. Когда процесс сведен к минимуму, мой код не работает. Этот процесс не будет отображаться на переднем плане, как если бы он не был сведен к минимуму.SetForegroundWindow не работает с минимизированным процессом

Вот фрагмент кода:

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!"); 
      } 
     } 

ответ

3

Вы будете нуждаться, чтобы позвонить ShowWindow, прежде чем пытаться установить его в качестве приоритетного окна.

Возможно, с 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 имеет несколько примеров, это на DllImport и используя функцию в C#.

+0

Ты избил меня, пока я его писал. +1 –

+0

Ты потрясающий! –