Прежде всего, вам не нужно UpdateWindow
, возможно, достаточно набрать SetWindowPos
. Вам просто нужно убедиться, что дескриптор окна создан (потому что процесс запускается) . Просто добавьте следующую строку перед вызовом SetWindowPos
:
application.WaitForInputIdle();
Если WaitForInputIdle()
не работает для вас, вы можете попробовать что-то вроде:
while (application.MainWindowHandle == IntPtr.Zero)
{
await Task.Delay(100);
}
У меня нормально работает следующий код:
Process application = new Process();
application.StartInfo.UseShellExecute = false;
application.StartInfo.FileName = "notepad.exe";
if (application.Start())
{
application.WaitForInputIdle();
/* Optional
while (application.MainWindowHandle == IntPtr.Zero)
{
await Task.Delay(100);
} */
Rectangle monitor = Screen.AllScreens[1].Bounds; // for monitor no 2
SetWindowPos(
application.MainWindowHandle,
IntPtr.Zero,
monitor.Left,
monitor.Top,
monitor.Width,
monitor.Height,
SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW);
}
Обратите внимание, что это только устанавливает положение окна, но не его размер. Если вы хотите, чтобы размер также был изменен, вам нужно убрать флаг SWP_NOSIZE
.