Тема: Определение запущенных окон (League of Legends)
Цель - сделать скрипт, который бы запускал League of Legends, вбивал логин/пароль, автоматически принимал игру по нажатию на кнопку (f11, например), а при закрытии игры - закрывался бы и скрипт.
Почти со всем перечисленным хоть и наверняка кривовато, но справился, кроме одного - что бы "при закрытии игры - закрывался бы и скрипт". Проблема в том, что League of Legends имеет, по сути, 3 окна - LoL Patcher (игра обновляется), Клиент PvP.net (сам клиент из которого ищется игра и т.д.) и League of Legends (TM) Client (непосредственно игра). Когда одно окно закрывается, другое открывается.
Через WinWait и WinWaitClose можно реализовать отслеживание скорее всего. LoL Patcher только в начале вылезает, потом нужно отслеживать. По идее, нужно детектить есть ли в системе окно Клиент PvP.net или League of Legends (TM) Client и если нет ни одного - закрывать скрипт.
Сейчас мой корявенький скрипт выглядит так:
#SingleInstance force
Run, "%A_ScriptDir%\lol.launcher.exe"
WinWait, LoL Patcher
if ErrorLevel
{
MsgBox, Истекло время ожидания. ;Наверное, можно и без этого обойтись
return
}
else
{
Loop, 9999
{
sleep 2000
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *50 %A_ScriptDir%\play.png ;Клик по кнопке "играть" в патчере (поиск по картинке).
if ErrorLevel = 0
{
MouseMove, FoundX, FoundY
sleep,1
Click
WinWait, LoL Patcher
if ErrorLevel
{
MsgBox, Истекло время ожидания.
return
}
else
{
Loop, 9999
{
sleep 3000
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *50 %A_ScriptDir%\nick.png ;Ищется картинка на экране логина (никнейм).
if ErrorLevel = 0
{
MouseMove, 400, 390
sleep,1
Send pass ;Вбивается пароль
Send, {ENTER}
return
}
}
return
}
return
}
}
return
}
return
F11:: ;Функция подтверждалки - нажимается кнопка "Принять" при нахождении матча (поиск по картинке)
gojoin:=!gojoin
if gojoin
{
gosub, Accepter
sleep 100
SetTimer, Accepter, 2012
}
else
{
ToolTip
SetTimer, Accepter, off
}
Accepter:
ifWinActive, Клиент PvP.net ; Если активно окно клиента "лиги"
{
ToolTip, Accepter is active`nPress F11 to deactivate
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *50 %A_ScriptDir%\OK_button.png
if ErrorLevel = 0
{
MouseMove, FoundX+100, FoundY+40
sleep,1
Click
}
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *50 %A_ScriptDir%\OK_buttonflash.png
if ErrorLevel = 0
{
MouseMove, FoundX+100, FoundY+40
sleep,1
Click
}
return
}
Наверняка есть что улучшить в коде, кроме детекта определения закрытия всех окон. Ещё проблемка со строкой ToolTip, Accepter is active`nPress F11 to deactivate - по нажатию F11, подтверждалка работает, после повторного нажатия F11, подтверждалка выключается, но надпись Accepter is active остаётся висеть на экране.