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, но в целом не будет надежным для приложений с несколькими окнами верхнего уровня.

Другие вопросы по тегам