ShowWindow порождает неожиданные окна / приложения
Я пытаюсь открыть окно блокнота в моем приложении C# с помощью этого кода:
Process[] Processes = Process.GetProcessesByName("notepad");
IntPtr hWnd = IntPtr.Zero;
Debug.WriteLine("Processes: " + Processes.Length);
// do something
foreach(Process p in Processes)
{
Console.WriteLine(p.ProcessName);
SetForegroundWindow(p.Handle);
ShowWindow(p.Handle, ShowWindowEnum.Show);
//SetActiveWindow(p.Handle);
//p.Kill();
}
Консоль логов "Блокнот" просто отлично. Я даже могу убить процесс блокнота. Однако по какой-то причине showWindow работает случайным образом. Большую часть времени он порождает что-то вроде сервера GDI+ под названием пустые окна и т. Д. И редко выдает блокнот.
Что я делаю неправильно?
1 ответ
Решение
ShowWindow
ожидает дескриптор окна, а не дескриптор процесса.
Попробуйте передать MainWindowHandle
вместо.
SetForegroundWindow(p.MainWindowHandle);
ShowWindow(p.MainWindowHandle, ShowWindowEnum.Show);
Это должно быть хорошо для Notepad.exe, но в целом не будет надежным для приложений с несколькими окнами верхнего уровня.