#include <file.au3>
#Include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <Date.au3> ; добавляем работу с датой и временем (функции _NowCalc() и _NowTime(5)
Global $defaultKeyDownDelay = 100
Opt("TrayIconDebug", 1) ; Отображать текущую строку сценария с помощью индикатора системной панели в режиме отладки
Opt("MustDeclareVars", 1) ;Форсируем задачу переменных. Тоесть после задания этой опции перед тем как нам использовать какую-либо переменную нам надо обозначить ее.
Opt("WinTitleMatchMode", 3) ; 1 - с начала, 2 - подстрока, 3 - точное совпадение, 4=что-то для работы с Tittle и Class
Opt ("SendKeyDownDelay", $defaultKeyDownDelay) ; Продолжительность удержания клавиши в нажатом состоянии до ее освобождения. Время в миллисекундах (стандартное значение - 5).
;~ Opt("PixelCoordMode", 2) ;Отсчет координат пикселей от левого верхнего угла клиентской части окна
;~ Opt("MouseCoordMode", 2) ;Отсчет координат мыши от левого верхнего угла клиентской части окна
Global $PathEVE = 'C:\CCP\bin\ExeFile.exe', $WorkdirEVE = "C:\CCP\bin"
Global $DefaultEVE = '[TITLE:EVE; CLASS:triuiScreen]'
Global $PassCoord[6] = [456, 702, 570, 715, 0x242622, 10]
Global $ConnectCoord[6] = [452, 730, 570, 740, 0 , 0]
Dim $fRunIni = "RunIni.txt" ; Файл с указаниями какой из файлов с настройками клиентов подгружать
Dim $fRunClients ; Файл с настройками для запуска клиентов (читается из файла $fRunIni)
#cs
Примерная структура файлов настроек:
Файл указанный в $fRunIni:
1 строка: Clients.txt
Файл 'Сlients.txt':
1 строка: Количество загружаемых клиентов (цифра), т.е. если клиент только один, то эта цифра =1
2 строка: Число настроек (всегда = 5)
3 строка: Имя окна (обычно совпадает с Именем персонажа)
4 строка: login
5 строка: password
6 строка: Устанавливаемая для окна этого клиента координата X
7 строка: Устанавливаемая для окна этого клиента координата Y
8 строка и далее: Повторяем начиная со строки №3 для второго и далее клиентов
Структура настроек для клиентов
1) Имя окна (обычно совпадает с Именем персонажа), позже заменяется Handle`ом
2) login name
3) password
4) Координата окна X
5) Координата окна Y
#ce
Dim $afRunIni ; Массив с ini настройками
#cs
Структура массива $afRunIni:
[0] - Количество элементов в массиве (задается системно)
[1] - Имя файла с настройками для запуска клиентов
Структура массива $afRunClients:
[0] - Количество элементов в массиве (задается системно)
[1] - Количество групп (количество запускаемых клиентов)
[2] - Число элеменов в группах (количество настроек читаемых из каждой группы)
[3]... - Перечисление настроек
#ce
Dim $afRunClients ; Массив в который читают настройки клиентов
CreateLogGUI() ; Инициализация окна лога
If Not _FileReadToArray($fRunIni,$afRunIni) Then
MsgBox(4096,"Error", " Ошибка обращения к файлу: " & @error)
Exit
EndIf
$fRunClients = $afRunIni[1]
UpdLog('Ini файл успешно прочитан. Содержит '& $afRunIni[0] &' элементов')
If Not _FileReadToArray($fRunClients,$afRunClients) Then
MsgBox(4096,"Error", " Ошибка обращения к файлу: " & @error)
Exit
EndIf
UpdLog('Файл настроек клиентов успешно прочитан. Содержит '& $afRunClients[0] &' элементов')
#cs
Структура массива $aRunClients[индекс 1][индекс 2]
- индекс 1: Номер группы (запускаемого клиента)
[0] - системные настройки, т.е.
[0][1] - Количество групп (из $afRunClients[1])
[0][2] - Число элементов в группах (из $afRunClients[2])
- индекс 2: Номер настройки конкретного клиента
начитается с [1]...
, т.е. [1][1] - Первая настройка первого клиента (после запуска меняется на Handle запущенного клиента)
[1][2] - вторая настройка первого клиента
[2][1] - первая настройка второго клиента...
#ce
Dim $aRunClients[$afRunClients[1]+1][$afRunClients[2]+1]
$aRunClients[0][0] = $afRunClients[0]
$aRunClients[0][1] = $afRunClients[1] ; Количество групп (клиентов)
$aRunClients[0][2] = $afRunClients[2] ; Число элементов (настроек) в группе
Dim $Clients = $aRunClients[0][1], $ClientsSettingCount = $aRunClients[0][2]
Dim $seti=1, $client=1, $i, $iCount = $Clients*$ClientsSettingCount + 2; Начинаем заполнение с первых индексов
UpdLog('Количество :' & $iCount)
For $i = 3 to $iCount ; Перебираем с третий строчки файла и до последней
$aRunClients[$client][$seti] = $afRunClients[$i]
UpdLog('№' & $i & ' значение: ' & $afRunClients[$i] & ' client=' & $client & ', seti=' & $seti & '. $aRunClients[x][y]=' & $aRunClients[$client][$seti])
$seti += 1
if $seti > $ClientsSettingCount Then ; Если текущий индекс настроек, больше чем число настроек, заполняем следующую строку (для следующего клиента)
$seti = 1
$client += 1
EndIf
Next
;~ MsgBox(0, "", "")
Login()
Func Wait($min = 100, $max = 500)
Sleep(Random($min, $max))
EndFunc
Func Login()
Local $winPos[2]
For $i = 1 To $Clients
While Not WinExists($DefaultEVE) ; Проверяем на наличие окна EVE с характеристиками: [TITLE:EVE; CLASS:triuiScreen]
Run($PathEVE, $WorkdirEVE)
WinWaitActive($DefaultEVE)
Wait(2000)
WEnd
WinActivate($DefaultEVE)
WinWaitActive($DefaultEVE)
WinSetTitle("EVE", "", $aRunClients[$i][1])
Local $handle = WinGetHandle($aRunClients[$i][1])
$winPos[0] = $aRunClients[$i][4]
$winPos[1] = $aRunClients[$i][5]
WinMove($handle, "", $winPos[0], $winPos[1]) ; Перемещаем окно на обозначеные в файле настройки координаты
Wait(3000,5500)
MouseMove($winPos[0]+Random($PassCoord[0], $PassCoord[2]), $winPos[1]+Random($PassCoord[1], $PassCoord[3]), Random(150, 300))
MouseClick('left')
Wait(100,300)
Send("{TAB}") ; 3 таба из-за бага в "Вторжении" с лишними контролами
Wait(500,800)
Send("{TAB}")
Wait(500,800)
Send("{TAB}")
Wait(500,800)
Send('{SHIFTDOWN}')
Wait(300)
Send("{HOME}")
Wait(300)
Send('{SHIFTUP}')
Wait(100,300)
Send('{DEL}')
Wait(100,200)
RandomSend($aRunClients[$i][2], 250)
Wait(200,300)
Send("{TAB}")
Wait(1000, 3000)
RandomSend($aRunClients[$i][3], 350)
Wait(300, 600)
MouseMove($winPos[0]+Random($ConnectCoord[0], $ConnectCoord[2]), $winPos[1]+Random($ConnectCoord[1], $ConnectCoord[3]), Random(70, 250))
MouseClick('left')
UpdLog('Клиент '& $aRunClients[$i][1] &' загружен. Handle = '& $handle)
$aRunClients[$i][1] = $handle ; Заменяем уже не нужное "имя окна" из настроек на Handle этого окна
Wait(1000,2000)
Next
EndFunc
;;; Отправляет текст на печать, при этом каждый символ отправляется со своей задержкой
;;; $string - строка для отправки, $max - максимальная задержка, $min - минимальная задерка
Func RandomSend($string, $max=600, $min=10)
Local $var
For $i=1 To StringLen ($string)
Opt ("SendKeyDownDelay", Random($min,$max))
$var = StringMid($string, $i, 1)
Send($var)
Next
Opt ("SendKeyDownDelay", $defaultKeyDownDelay)
EndFunc
#Region - Создание и управление окном лога
Func CreateLogGUI()
Local $MainGUI = GUICreate("My GUI", 0, 0, 0, 0, $WS_POPUP)
Global $UpTime = TimerInit()
Local $Log = GUICreate("Log", 600, 200, 1026, 228, $WS_SYSMENU , -1, $MainGUI)
Global $ListView = GuiCtrlCreateListView("GTime|LTime|Событие", 0, 0, 600, 200)
_GUICtrlListView_SetColumnWidth($Listview, 2, 600)
GUICtrlSetFont(-1, 10)
WinSetOnTop($Log,"",1)
GUICtrlSetBkColor($listview, 0x000000)
GUICtrlSetColor($listview, 0xFFFFFF)
GUISetState(@SW_SHOW)
Global $LogInfo
EndFunc
Func UpdLog($Text=0)
If _GUICtrlListView_GetItemCount($listview) > 50 Then _GUICtrlListView_DeleteItem($listview, 0)
If $LogInfo <> $Text Then
$LogInfo = $Text
GuiCtrlCreateListViewItem(@HOUR&":"&@MIN&":"&@SEC&"|"&Int(Round(TimerDiff($Uptime)/1000)/60/60)&":"&Int((Round(TimerDiff($Uptime)/1000)-Int(Round(TimerDiff($Uptime)/1000)/60/60)*3600)/60)&":"&Int(Round(TimerDiff($Uptime)/1000)-Int(Round(TimerDiff($Uptime)/1000)/60/60)*3600-Int((Round(TimerDiff($Uptime)/1000)-Int(Round(TimerDiff($Uptime)/1000)/60/60)*3600)/60)*60)&"|"& $LogInfo, $listView)
EndIf
_GUICtrlListView_Scroll($listview,0,20)
EndFunc
#EndRegion - Создание и управление окном лога