firex
AutoIT Гуру
- Сообщения
- 943
- Репутация
- 208
Anna
Справка, справка и еще раз справка.
Не проверял:
Справка, справка и еще раз справка.
Не проверял:
Код:
#Include <WinAPIEx.au3>
GLobal Const $ERROR_ACCESS_DENIED = 5
Global Const $ERROR_ALREADY_EXISTS = 183
; *
Global Const $__g_sMutexPrefix = 'MyMutex_'
Global $g_hMutex, $g_hWnd = 0 ; Окно, с которым надо работать в скрипте
; ---
Local $aWnd = WinList('SomeWindowTitle')
; Выбираем окно для работы в скрипте
For $i = 1 To $aWnd[0][0]
$g_hMutex = _CaptureWindow($aWnd[$i][1])
If $g_hMutex Then
$g_hWnd = $aWnd[$i][1]
ExitLoop
EndIf
Next
; Если не осталось свободных окон ...
If Not $g_hWnd Then
MsgBox(16, '', 'Нет свободных окон.')
Exit
EndIf
; Работаем с нашим окном
Do
WinActivate($g_hWnd)
Until Random(1, 20, 1) = 5 Or Not Sleep(5000)
; Освобождаем окно и завершаем работу скрипта
_ReleaseWindowByMutex($g_hMutex)
Func _CaptureWindow($hWnd) ; Захватить
Local $hMutex = 0
; ---
$hMutex = _WinAPI_CreateMutex($__g_sMutexPrefix & Hex($hWnd, 8))
Switch _WinAPI_GetLastError()
Case $ERROR_ACCESS_DENIED
; Nothing
Case $ERROR_ALREADY_EXISTS
_WinAPI_CloseHandle($hMutex)
$hMutex = 0
EndSwitch
; ---
Return $hMutex
EndFunc
Func _ReleaseWindowByMutex($hMutex) ; Освободить
Return _WinAPI_CloseHandle($hMutex)
EndFunc