Как я могу дождаться, пока `start-process notepad` завершит создание своего окна? - PullRequest
0 голосов
/ 06 мая 2020

Когда я использую start-process, чтобы создать новый процесс и присвоить его переменной ...

 $np = start-process -passThru notepad

... и затем запросить .MainWindowHandle ...

 $np.MainWindowHandle

... Кажется, мне дали HWND блокнота.

Однако, когда я пытаюсь сделать то же самое в одном go ...

(start-process -passThru notepad).MainWindowHandle

... Мне дано 0.

Вероятно, это так, потому что MainWindowHandle оценивается до того, как блокнот создает свое окно.

Итак, есть ли способ без использования start-sleep или вход в al oop, который постоянно запрашивает значение MainWindowHandle, чтобы дождаться завершения запуска блокнота?

1 Ответ

1 голос
/ 06 мая 2020

Итак, есть ли способ

Да

без использования start-sleep или входа в al oop, который многократно запрашивает значение MainWindowHandle

Не то, чтобы я мог придумать:)

# Define a timeout threshold 10 seconds into the future
$threshold = (Get-Date).AddSeconds(10)

# Start the process
$proc = Start-Process notepad -PassThru

while(-not $proc.HasExited -and ((Get-Date) -lt $threshold -or $proc.MainWindowTitle -eq 0)){
  Start-Sleep -MilliSeconds 250
}
if($proc.MainWindowTitle -eq 0){
  if(-not $proc.HasExited)
    $proc.Terminate()
  }
  throw 'Failed to spawn window in time'
  return
}

# Do stuff with $proc.MainWindowHandle
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...