Что нового

[Автоматизация] Объединение двух разных скриптов в один.

marmisha

Новичок
Сообщения
41
Репутация
2
Помогите пожалуйста объединить эти два скрипта в один:
Код:
#RequireAdmin
#include <File.au3>
#include <Array.au3>
HotKeySet("{ESC}", "Terminate")
Global $Paused
HotKeySet("{Del}", "TogglePause")
Func TogglePause()
    $Paused = Not $Paused
    While $Paused
    WEnd
    ToolTip("")
EndFunc   ;==>TogglePause
Func Terminate()
    Exit 0
EndFunc   ;==>Terminate
Dim $aLogins, $aPasswords ;объявляем массивы
;читаем файл в массив
_FileReadToArray('login.txt', $aLogins) ;файл с логинами
_FileReadToArray('pass.txt', $aPasswords);файл с паролями
$hFile = FileOpen("check.txt", 1) ; открываем файл до начала циклов записи
If $hFile = -1 Then
    Exit
EndIf
For $i = 1 To $aLogins[0] ; цикл начинается с первого элемента и идет до последнего элемента
    WinWait("Lineage II", "") ; количество элементов в массиве при _FileReadToArray('file', $array) хранится в $array[0]
    If Not WinActive("Lineage II", "") Then WinActivate("Lineage II", "")
    WinWaitActive("Lineage II", "")
    Sleep(100)
    MouseClick("left", 600, 301, 1, 0)
    Sleep(100)
    MouseClick("left", 600, 301, 2, 0)
    MouseClick("left")
    Sleep(500)
    MouseClick("left")
    Send("{BS 20}")
    Sleep(500)
    Send($aLogins[$i]);Логин 1
    MouseClick("left", 598, 321, 2, 0)
    Sleep(600)
    MouseClick("left")
    Send("{BS 20}")
    Send($aPasswords[$i]);Пароль 1
    Send("{ENTER}")
    Sleep(4000)
    Send("{ENTER}"); подтверждение соглашения
    Sleep(1000)
    Send("{ENTER}")
    ToolTip($aLogins[$i] & "," & $aPasswords[$i], 1050, 0)
    Sleep(1000)
    FileWriteLine($hFile, $aLogins[$i] & ":" & $aPasswords[$i])
    Sleep(6000)
	MouseMove(940, 530, 0)
    MouseClick("left")
	Sleep(100)
	MouseMove(635, 360, 0)
    MouseClick("left")
Next
FileClose($hFile) ; после всех циклов записи закрываем файл

и вот этот :
Код:
#Include <ClipBoard.au3>
#Include <GDIPlus.au3>

_ScreenCapture(@ScriptDir & '\Screenshot.jpg')

Func _ScreenCapture($sFile)

    Local $Result, $Timer, $hImage, $hBitmap = 0

    ClipPut('')
    Send('{PRINTSCREEN}')
    $Timer = TimerInit()
    While TimerDiff($Timer) < 1000
        _ClipBoard_Open(0)
        $hBitmap = _ClipBoard_GetDataEx($CF_BITMAP)
        _ClipBoard_Close()
        If $hBitmap Then
            ExitLoop
        EndIf
        Sleep(10)
    WEnd
    If Not $hBitmap Then
        Return 0
    EndIf
    _GDIPlus_Startup()
    $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    $Result = _GDIPlus_ImageSaveToFile($hImage, $sFile)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $Result
EndFunc   ;==>_ScreenCapture
Первый скрипт кликает по определенным координантам, вводит данные в поля, а второй делает скриншот экрана и сохраняет в этой же папке в формате .jpg. Второй скрипт необходимо поставить в конец первого, после строки
Код:
FileWriteLine($hFile, $aLogins[$i] & ":" & $aPasswords[$i])
и ,желательно, чтобы после каждого нового ввода логин-пароля, делался новый скриншот(с другим именем, например Screen1, Screen2 и тд)
Очень прошу помочь!)))
 
Автор
M

marmisha

Новичок
Сообщения
41
Репутация
2
Народ, ну помогите с проблемой :shok:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
marmisha [?]
с другим именем, например Screen1, Screen2 и тд
Код:
#include <WinAPIEx.au3>

$sFile = @ScriptDir & '\Test\test.txt'

For $i = 1 To 5
	$hFile = FileOpen(_WinAPI_PathYetAnotherMakeUniqueName($sFile), 2 + 8)
	FileWrite($hFile, $i & '. Bla-bla-bla' & @CRLF & 'Bla-bla-bla')
	FileClose($hFile)
Next
ShellExecute(_WinAPI_PathRemoveFileSpec($sFile))
Папку Test скрипт сам создаст.
WinAPIEx.au3
Кстати, не знаю как в 7, но в XP (у меня) ограничение на 999 уникальных имен. :smile:
 
Автор
M

marmisha

Новичок
Сообщения
41
Репутация
2
Спасибо, но это не много не то. Мне нужны скриншоты рабочего стола под каждый введеный логин-пароль с разными именами.
 

shakur

Осваивающий
Сообщения
76
Репутация
24
эмм, ну если скрипты рабочието можно наверное так
Код:
#RequireAdmin
#include <File.au3>
#include <Array.au3>
#Include <ClipBoard.au3>
#Include <GDIPlus.au3>

HotKeySet("{ESC}", "Terminate")
Global $Paused
HotKeySet("{Del}", "TogglePause")
Func TogglePause()
    $Paused = Not $Paused
    While $Paused
    WEnd
    ToolTip("")
EndFunc   ;==>TogglePause
Func Terminate()
    Exit 0
EndFunc   ;==>Terminate

Func _ScreenCapture($sFile)

    Local $Result, $Timer, $hImage, $hBitmap = 0

    ClipPut('')
    Send('{PRINTSCREEN}')
    $Timer = TimerInit()
    While TimerDiff($Timer) < 1000
        _ClipBoard_Open(0)
        $hBitmap = _ClipBoard_GetDataEx($CF_BITMAP)
        _ClipBoard_Close()
        If $hBitmap Then
            ExitLoop
        EndIf
        Sleep(10)
    WEnd
    If Not $hBitmap Then
        Return 0
    EndIf
    _GDIPlus_Startup()
    $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    $Result = _GDIPlus_ImageSaveToFile($hImage, $sFile)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $Result
EndFunc   ;==>_ScreenCapture

Dim $aLogins, $aPasswords ;объявляем массивы
;читаем файл в массив
_FileReadToArray('login.txt', $aLogins) ;файл с логинами
_FileReadToArray('pass.txt', $aPasswords);файл с паролями
$hFile = FileOpen("check.txt", 1) ; открываем файл до начала циклов записи
If $hFile = -1 Then
    Exit
EndIf
For $i = 1 To $aLogins[0] ; цикл начинается с первого элемента и идет до последнего элемента
    WinWait("Lineage II", "") ; количество элементов в массиве при _FileReadToArray('file', $array) хранится в $array[0]
    If Not WinActive("Lineage II", "") Then WinActivate("Lineage II", "")
    WinWaitActive("Lineage II", "")
    Sleep(100)
    MouseClick("left", 600, 301, 1, 0)
    Sleep(100)
    MouseClick("left", 600, 301, 2, 0)
    MouseClick("left")
    Sleep(500)
    MouseClick("left")
    Send("{BS 20}")
    Sleep(500)
    Send($aLogins[$i]);Логин 1
    MouseClick("left", 598, 321, 2, 0)
    Sleep(600)
    MouseClick("left")
    Send("{BS 20}")
    Send($aPasswords[$i]);Пароль 1
    Send("{ENTER}")
    Sleep(4000)
    Send("{ENTER}"); подтверждение соглашения
    Sleep(1000)
    Send("{ENTER}")
    ToolTip($aLogins[$i] & "," & $aPasswords[$i], 1050, 0)
    _ScreenCapture(@ScriptDir & '\Screenshot'&string($i)&'.jpg')
    Sleep(1000)
    FileWriteLine($hFile, $aLogins[$i] & ":" & $aPasswords[$i])
    Sleep(6000)
    MouseMove(940, 530, 0)
    MouseClick("left")
    Sleep(100)
    MouseMove(635, 360, 0)
    MouseClick("left")
	
Next
FileClose($hFile) ; после всех циклов записи закрываем файл
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
marmisha
Можно так попробовать. Клики не проверял, только чтение-запись и скриншоты.
Код:
#include <File.au3>
#include <WinAPIEx.au3>
#include <ScreenCapture.au3>

$fPaused = False
$sTitle = 'Lineage II'
$sFileLogin = @ScriptDir & '\login.txt'
$sFilePass = @ScriptDir & '\pass.txt'
$sFileCheck = @ScriptDir & '\check.txt'
$sFolderScreen = @ScriptDir & '\Screens'
$iCount = 0
$iUbound = 0
$hWinLineage = 0

Dim $aLogins, $aPasswords

HotKeySet('{ESC}', 'Terminate')
HotKeySet('{Del}', 'TogglePause')

_FileReadToArray($sFileLogin, $aLogins)
If @error Then Terminate()
_FileReadToArray($sFilePass, $aPasswords)
If @error Then Terminate()
If $aLogins[0] <= $aPasswords[0] Then
	$iUbound = $aLogins[0]
Else
	$iUbound = $aPasswords[0]
EndIf

$hFile = FileOpen($sFileCheck, 1)
If $hFile = -1 Then Terminate()

For $i = 1 To $iUbound
	$hWinLineage = WinWait($sTitle)
	If Not WinActive($hWinLineage) Then WinActivate($hWinLineage)
	WinWaitActive($hWinLineage)
	Sleep(100)
	MouseClick('left', 600, 301, 1, 0)
	Sleep(100)
	MouseClick('left', 600, 301, 2, 0)
	MouseClick('left')
	Sleep(500)
	MouseClick('left')
	Send('{BS 20}')
	Sleep(500)
	Send($aLogins[$i])
	MouseClick('left', 598, 321, 2, 0)
	Sleep(600)
	MouseClick('left')
	Send('{BS 20}')
	Send($aPasswords[$i])
	Send('{ENTER}')
	Sleep(4000)
	Send('{ENTER}')
	Sleep(1000)
	Send('{ENTER}')
	ToolTip($aLogins[$i] & ',' & $aPasswords[$i], 1050, 0)
	Sleep(1000)
	FileWriteLine($hFile, $aLogins[$i] & ':' & $aPasswords[$i])
	_My_ScreenCapture($hWinLineage, $i)
	If Not @error Then
		$iCount += 1
	EndIf
	Sleep(6000)
	MouseMove(940, 530, 0)
	MouseClick('left')
	Sleep(100)
	MouseMove(635, 360, 0)
	MouseClick('left')
Next
FileClose($hFile)
MsgBox(64, 'Info', 'Пройдено циклов: ' & $iUbound & @LF & 'Сделано скриншотов: ' & $iCount)

Func _My_ScreenCapture($h_Window, $i_Count)
	Local $sFileScreen = '\Screen.jpg', $s_Path
	If Not IsHWnd($h_Window) Then Return SetError(1)
	If Not Mod($i_Count - 1, 500) Then
		$sFolderScreen = _WinAPI_PathYetAnotherMakeUniqueName($sFolderScreen)
	EndIf
	If Not FileExists($sFolderScreen) Then
		If Not DirCreate($sFolderScreen) Then Return SetError(1)
	EndIf
	$s_Path = _WinAPI_PathYetAnotherMakeUniqueName($sFolderScreen & $sFileScreen)
	WinSetOnTop($h_Window, '', 1)
	Sleep(50)
	_ScreenCapture_CaptureWnd($s_Path, $h_Window, 0, 0, -1, -1, False)
	WinSetOnTop($h_Window, '', 0)
	If FileExists($s_Path) Then
		Return SetError(0)
	Else
		Return SetError(1)
	EndIf
EndFunc   ;==>_My_ScreenCapture

Func TogglePause()
	$fPaused = Not $fPaused
	While $fPaused
		Sleep(10)
	WEnd
	ToolTip('')
EndFunc   ;==>TogglePause

Func Terminate()
	MsgBox(64, 'Info', 'Выход')
	Exit
EndFunc   ;==>Terminate
WinAPIEx.au3
 
Автор
M

marmisha

Новичок
Сообщения
41
Репутация
2
madmasles сказал(а):
marmisha
Можно так попробовать. Клики не проверял, только чтение-запись и скриншоты.
Код:
#include <File.au3>
#include <WinAPIEx.au3>
#include <ScreenCapture.au3>

$fPaused = False
$sTitle = 'Lineage II'
$sFileLogin = @ScriptDir & '\login.txt'
$sFilePass = @ScriptDir & '\pass.txt'
$sFileCheck = @ScriptDir & '\check.txt'
$sFolderScreen = @ScriptDir & '\Screens'
$iCount = 0
$iUbound = 0
$hWinLineage = 0

Dim $aLogins, $aPasswords

HotKeySet('{ESC}', 'Terminate')
HotKeySet('{Del}', 'TogglePause')

_FileReadToArray($sFileLogin, $aLogins)
If @error Then Terminate()
_FileReadToArray($sFilePass, $aPasswords)
If @error Then Terminate()
If $aLogins[0] <= $aPasswords[0] Then
	$iUbound = $aLogins[0]
Else
	$iUbound = $aPasswords[0]
EndIf

$hFile = FileOpen($sFileCheck, 1)
If $hFile = -1 Then Terminate()

For $i = 1 To $iUbound
	$hWinLineage = WinWait($sTitle)
	If Not WinActive($hWinLineage) Then WinActivate($hWinLineage)
	WinWaitActive($hWinLineage)
	Sleep(100)
	MouseClick('left', 600, 301, 1, 0)
	Sleep(100)
	MouseClick('left', 600, 301, 2, 0)
	MouseClick('left')
	Sleep(500)
	MouseClick('left')
	Send('{BS 20}')
	Sleep(500)
	Send($aLogins[$i])
	MouseClick('left', 598, 321, 2, 0)
	Sleep(600)
	MouseClick('left')
	Send('{BS 20}')
	Send($aPasswords[$i])
	Send('{ENTER}')
	Sleep(4000)
	Send('{ENTER}')
	Sleep(1000)
	Send('{ENTER}')
	ToolTip($aLogins[$i] & ',' & $aPasswords[$i], 1050, 0)
	Sleep(1000)
	FileWriteLine($hFile, $aLogins[$i] & ':' & $aPasswords[$i])
	_My_ScreenCapture($hWinLineage, $i)
	If Not @error Then
		$iCount += 1
	EndIf
	Sleep(6000)
	MouseMove(940, 530, 0)
	MouseClick('left')
	Sleep(100)
	MouseMove(635, 360, 0)
	MouseClick('left')
Next
FileClose($hFile)
MsgBox(64, 'Info', 'Пройдено циклов: ' & $iUbound & @LF & 'Сделано скриншотов: ' & $iCount)

Func _My_ScreenCapture($h_Window, $i_Count)
	Local $sFileScreen = '\Screen.jpg', $s_Path
	If Not IsHWnd($h_Window) Then Return SetError(1)
	If Not Mod($i_Count - 1, 500) Then
		$sFolderScreen = _WinAPI_PathYetAnotherMakeUniqueName($sFolderScreen)
	EndIf
	If Not FileExists($sFolderScreen) Then
		If Not DirCreate($sFolderScreen) Then Return SetError(1)
	EndIf
	$s_Path = _WinAPI_PathYetAnotherMakeUniqueName($sFolderScreen & $sFileScreen)
	WinSetOnTop($h_Window, '', 1)
	Sleep(50)
	_ScreenCapture_CaptureWnd($s_Path, $h_Window, 0, 0, -1, -1, False)
	WinSetOnTop($h_Window, '', 0)
	If FileExists($s_Path) Then
		Return SetError(0)
	Else
		Return SetError(1)
	EndIf
EndFunc   ;==>_My_ScreenCapture

Func TogglePause()
	$fPaused = Not $fPaused
	While $fPaused
		Sleep(10)
	WEnd
	ToolTip('')
EndFunc   ;==>TogglePause

Func Terminate()
	MsgBox(64, 'Info', 'Выход')
	Exit
EndFunc   ;==>Terminate
WinAPIEx.au3
Спасибо, все работает идеально и так, как и задумывалось! Еще раз СПАСИБО! ;D
 
Верх