Я знаю, что это огромный некр и простите, если он уже был решен, но я боролся с этим в течение некоторого времени, и вот действительно простое решение, которое я написал:
function WinExist($winTitle, $instance = 0)
{
$h = Get-Process | Where-Object { $_.MainWindowTitle -match $winTitle } | ForEach-Object { $_.MainWindowHandle }
if ( $h -eq $null )
{
return 0
}
else
{
if ( $h -is [System.Array] )
{
$h = $h[$instance]
}
return $h
}
}
Возвращает "0", если окно не найдено или дескриптор окна. Если найдено больше окон, соответствующих строке $ winTitle, возвращается номер экземпляра $ (0 означает первое окно, 1 секунду и т.д.).
Пример:
# WinExist str_WindowTitle int_WindowNumber
# returns the handle of second notepad window (if more than 1 opened)
$hwnd = WinExist "notepad" 1