Что нового

Что делает скрипт когда видет 10 окон с одинаковым названием?

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
 
A

Alofa

Гость
Anna, я так понимаю принцип такой:
вы вручную запускаете 3 окна браузера, а потом также вручную запускаете 3 экземпляра скрипта?
 

Anna

Новичок
Сообщения
119
Репутация
2
firex сказал(а):
Спасибо, проверила, пишет “нет свободных окон”. Окно с именем “dsa” стоит не обновлённое.

Alofa сказал(а):
Anna, я так понимаю принцип такой:
вы вручную запускаете 3 окна браузера, а потом также вручную запускаете 3 экземпляра скрипта?
Совершенно верно. Но мне ненужно чтобы скрипт не освобождал окно и не завершал свою работу после выполнения действий с окном. Работа в цикле, захватил окно один раз и “не отпускать” пока не закрою окно или завершу работу скрипта принудительно.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Anna
Ощущение конечно, что мы в столе заказов, или того хуже - в мире без справок.
Код:
#include <Array.au3>

Local $aWnd = WinList('SomeWindowTitle')
_ArrayDisplay($aWnd)


Вы убедитесь в том, что AutoIt вообще находит ваше окно.
 
A

Alofa

Гость
Anna сказал(а):
... Совершенно верно.
А где же то, ради чего мы тут собрались - т.е. автоматизация?
Думаю проще будет если вы один раз запустите скрипт, а он сам помножит себя на количество окон. А еще лучше если он (скрипт) 1 будет следить за всеми окнами.

P.s. я думаю, будет лучше переместиться с данным вопросом в Стол заказов, дабы не засорять данную тему.
 

Anna

Новичок
Сообщения
119
Репутация
2
firex Вы убедитесь в том, что AutoIt вообще находит ваше окно.
AutoIt находит все окна, только кодом из справки
Код:
$aList = WinList()
; $aList = WinList("[REGEXPCLASS:(Explore|Cabinet)WClass]") ; возвращает список только окон Эксплорера

$sText = ''
For $i = 1 To $aList[0][0]
    ; Только для окон имеющих заголовок и не скрытых
    If $aList[$i][0] <> "" And BitAND(WinGetState($aList[$i][1]), 2) Then
        ; объединяющее присвоение элементов массива к переменной $sText с переносом строки @LF
        $sText &= "Дескриптор=" & $aList[$i][1] & "    Заголовок=" & $aList[$i][0] & @LF
    EndIf
Next
MsgBox(4096, 'Сообщение', $sText)
_WinAPI_CreateSemaphore
А тем что Вы показали нет. В чём может быть причина?
Alofa А где же то, ради чего мы тут собрались - т.е. автоматизация?

Дело в том что авторизоваться приходится в ручную из-за капчи с картинками.
Вот и открываю браузер вручную, ещё и браузеры разные.
О том, что скрипт может сам, помножить себя на количество окон я не подозревала.
Все окна обработать корректно, один скрипт не успеет, это для примера взяла 3 окна, их гораздо больше..
...дабы не засорять данную тему
Сначала, так и хотела, открыть новую тему, но потом нашла эту и вспомнила, что в правилах форума не рекомендуют открывать однотипных тем.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Anna [?]
А тем что Вы показали нет. В чём может быть причина?
Много в чем, но все упирается в чтение справки. У меня нет желания гадать что вы делаете на ровном месте не так, поэтому по-порядку читаем:
http://autoit-script.ru/autoit3_docs/intro/windowsbasic.htm
http://autoit-script.ru/autoit3_docs/functions/AutoItSetOption.htm#WinTitleMatchMode
http://autoit-script.ru/autoit3_docs/intro/windowsadvanced.htm
 
Верх