Что нового

[Окна, Диалоги] Как получить Handle основного окна, если известен только PID?

SimplyFree

Новичок
Сообщения
1
Репутация
0
Как получить Handle основного окна программы, запущенной с помощью функции Run() AutoIt, если известен только PID, возвращенный этой функцией? Возможно ли это сделать без использования циклов?
Заголовок и класс окна, допустим, не известны. Либо заголовок и класс окна известны, но существует несколько таких одинаковых окон, а мне нужно именно то, которое запустил я в текущем скрипте. Закрытие каких-либо окон или процессов не приемлемо. Повторюсь, желательно решить эту задачу без тупого перебора со сравнением.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
SimplyFree
Если нужно сразу после запуска, то, наверно, это окна будет активно? Тогда:
Код:
WinGetHandle("[ACTIVE]")


А так _WinAPI_EnumProcessWindows() из WinAPIEx.au3, но там массив и перебор в цикле, соответственно...
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
желательно решить эту задачу без тупого перебора со сравнением.
Вряд-ли...

Код:
Func _Process2Win($pid)
    If IsString($pid) Then $pid = ProcessExists($pid)
    If $pid = 0 Then Return -1
    $list = WinList()
    For $i = 1 To $list[0][0]
        If $list[$i][0] <> "" AND BitAnd(WinGetState($list[$i][1]),2) Then
            $wpid = WinGetProcess($list[$i][0])
            If $wpid = $pid Then Return $list[$i][0]
        EndIf
    Next
    Return -1
EndFunc
 

pekich

Новичок
Сообщения
19
Репутация
2
Скрипт при запуске приложения по классу окна определяет его хэндл.

Код:
Run(@ProgramFilesDir&"\Total Commander\Plugins\exe\AkelPad.exe");выполнить AkelPad.exe
$handle=WinWait('[class:AkelPad4]','',5); возврат хэндла !!!
MsgBox(4096,"Возврат хэндла !!!",$handle,3)
Exit


При каждом запуске приложения значение хэндла меняется.
Пока скрипт выполняется, хэндл будет в переменной $handle .
Если окон много и нужно управлять каждым, тогда для каждого надо определять хэндл.
 
Верх