пример поиска окна по процессу:
читать дальше »
Код:
Opt('MustDeclareVars', 1)
Opt('TrayIconDebug', 1)
Opt('TrayIconHide', 0)
Local $iPID, $aWin
$iPID = ProcessExists('notepad.exe')
If NOT ProcessExists('notepad.exe') Then
$iPID = Run('notepad.exe')
WinWait('[Class:Notepad]')
EndIf
$aWin = _ProcessGetWindow($iPID)
If NOT @error Then
MsgBox(64, 'Поиск окна', 'Процесс "notepad.exe"' & @CRLF & @CRLF & @TAB & 'указатель: ' & $aWin[1] & @CRLF & @TAB & 'заголовок: ' & $aWin[0])
Else
MsgBox(64, 'Поиск окна', 'Ошибка поиска окна')
EndIf
Func _ProcessGetWindow($iPID, $iRet=-1)
Local $aWinList = WinList()
Local $aRet[2]
If IsString($iPID) Then $iPID = ProcessExists($iPID)
For $i = 1 To UBound($aWinList)-1
If WinGetProcess($aWinList[$i][1]) = $iPID Then
$aRet[0] = $aWinList[$i][0] ;Title
$aRet[1] = $aWinList[$i][1] ;WinHandle
If $iRet = 0 Then Return $aRet[0]
If $iRet = 1 Then Return $aRet[1]
Return $aRet
EndIf
Next
Return SetError(1, 0, $aRet)
EndFunc
смотрю уже было )
можно вообще взять весь список существующих окон и найти среди них нужное.
Подробней опиши какое окно необходимо.
Пример поиска всех окон процесса:
Код:
Opt('MustDeclareVars', 1)
Opt('TrayIconDebug', 1)
Opt('TrayIconHide', 0)
#include <Array.au3>
Local $iPID, $aWin
Local $sProcessName = 'Skype.exe' ; Имя процесса, окна которого необходимо найти
If NOT ProcessExists($sProcessName) Then Exit MsgBox(48, 'Поиск окна', 'Процесс "' & $sProcessName & '" не запущен')
$aWin = _ProcessGetWindow($sProcessName) ; Поиск всех имеющихся окон
;~ $aWin = _ProcessGetWindow($sProcessName, 1) ; Поиск только отображаемых окон
If NOT @error Then
_ArrayDisplay($aWin, 'Поиск окон процесса "' & $sProcessName & '"')
Else
MsgBox(48, 'Поиск окна', 'Окна не найдены')
EndIf
Func _ProcessGetWindow($sProcessName, $fOnlyVisible=0)
Local $iPID, $aWinList = WinList()
Local $aRet[1][2]
$aRet[0][0] = 0
If IsString($sProcessName) Then $iPID = ProcessExists($sProcessName)
For $i = 1 To UBound($aWinList)-1
If WinGetProcess($aWinList[$i][1]) = $iPID Then
If $fOnlyVisible AND NOT BitAnd(WinGetState($aWinList[$i][1]), 2) Then ContinueLoop
$aRet[0][0] += 1
ReDim $aRet[$aRet[0][0]+1][2]
$aRet[$aRet[0][0]][0] = $aWinList[$i][0] ;Title
$aRet[$aRet[0][0]][1] = $aWinList[$i][1] ;WinHandle
EndIf
Next
If $aRet[0][0] Then Return SetError(0, 0, $aRet)
Return SetError(1, 0, $aRet)
EndFunc