Что нового

АвтоРелогин

Lexx98

Продвинутый
Сообщения
272
Репутация
73
Да ну, частые запросы... Если всё нормально, то они идут только в момент релогина. Надеюсь, у вас не такая фиговая связь, что коннект пропадает по 10 раз на час? Нет? Имхо, несколько раз в сутки ничего не решат. Ну и после ДТ тоже не каждую секунду же вы его опрашиваете "сервер, ты поднялся?".
 

Insari

Осваивающий
Сообщения
34
Репутация
35
Задавшись некоторой автоматизацией напрягающих меня элементов EVE собрал "из запчастей" небольшой модуль для логина нескольких клиентов.

Используется режим клиента "Fixed Window", как наиболее адекватный для многооконности.

Изменения:
  • Учтен баг "Вторжения" с лишними контролами на странице загрузки.
  • Добавлена функция для "человеческого" печатания логина и пароля (RandomSend)

Код:
#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 - Создание и управление окном лога
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Наиболее адекватным для многооконности является это:
Код:
Opt("PixelCoordMode", 2) ;Отсчет координат пикселей от левого верхнего угла клиентской части окна
Opt("MouseCoordMode", 2) ;Отсчет координат мыши от левого верхнего угла клиентской части окна

Fixed Window - чисто бонус да и тот не имеет особой практической ценности.
 

Insari

Осваивающий
Сообщения
34
Репутация
35
Замечание дельное.
Для чисто ботов - "Fixed Window" просто бонус, для автоматизированных клиентов (когда только часть функций переложена на ботов, а остальное "ручками") ОЧЕНЬ полезный бонус, когда окон больше 2х, т.к. не мешают заголовки и случайно не ткнешь на "закрыть".
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Это один из 3-х режимов отображения окна евы. Windowed, Fullscreen, Fixed.
 

Lexx98

Продвинутый
Сообщения
272
Репутация
73
Это новая фича, введённая в патче inсursion. Смотреть в эскейп-меню евы.
 

DJ_Tommy

Продвинутый
Сообщения
236
Репутация
57
а что бы не заглядывать в еву - подскажите как он работает
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
просто обрубает рамки окна и закрепляет его левый верхний угол по координатам экрана 0.0. Передвинуть его мышью или изменить размер уже не получится, только командой WinMove, хотя winmove меняет размер только визуально. Фактически же все кнопки и области клиента остаются на прежнем месте.
 

Insari

Осваивающий
Сообщения
34
Репутация
35
При fixed спокойно перетягиваются окна и мышкой (кроме размера, что выгодно отличает этот режим от простого оконного :laugh:smile:
Просто кликаешь правой по заголовку окна на панели задач и выбираешь "Переместить", далее небольшое движение курсорными клавишами и далее мышкой тянешь куда надо.
В Windows 7 для того чтобы увидеть это меню надо на панели задач тыкать SHIFT+ПКМ.
 
Верх