Что нового

Связывание GUI и скрипта

marmisha

Новичок
Сообщения
41
Репутация
2
Помогите связать скрипт с кнопками. Не понимаю как кнопки привязать к действиям. Например, как при нажатии на кнопку
Код:
$Label1 = GUICtrlCreateLabel("Введите список логинов", 48, 16, 129, 17)
вызвать проводник и выбрать login.txt. Как отобразить лог введенных логин-паролей из файла check.txt. Как задать для скипта введенные координаты в поля
Код:
$Label3 = GUICtrlCreateLabel("Координаты правой стороны поля Login", 24, 160, 207, 17)
и их выполнить.
Скипт:
Код:
#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($i & ":" & $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 <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=D:\разное\Языки программирования\Autoit\koda_1.7.3.0\Forms\Автологин графика.kxf
$Form1 = GUICreate("Автологин Lineage2", 648, 339, 183, 114)
GUICtrlCreateInput("", 24, 40, 185, 21)
$Label1 = GUICtrlCreateLabel("Введите список логинов", 48, 16, 129, 17)
$Button1 = GUICtrlCreateButton("Логины", 216, 40, 49, 25)
GUICtrlCreateInput("", 25, 105, 185, 21)
$Label2 = GUICtrlCreateLabel("Введите список паролей", 49, 81, 130, 17)
$Button2 = GUICtrlCreateButton("Пароли", 217, 105, 49, 25)
$Label3 = GUICtrlCreateLabel("Координаты правой стороны поля Login", 24, 160, 207, 17)
GUICtrlCreateInput("", 40, 200, 49, 21)
GUICtrlCreateInput("", 168, 200, 49, 21)
$Label4 = GUICtrlCreateLabel("Координаты правой стороны поля Password", 23, 248, 227, 17)
GUICtrlCreateInput("", 39, 288, 49, 21)
GUICtrlCreateInput("", 167, 288, 49, 21)
$Label5 = GUICtrlCreateLabel("Введенные логины-пароли", 376, 8, 140, 17)
GUICtrlCreateEdit("", 304, 40, 305, 273)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
marmisha [?]
Не понимаю как кнопки привязать к действиям
так ведь в справке все расписано, в той же
Код:
GUICtrlCreateButton

у тебя кстати приведены не кнопки, а надписи
 
Автор
M

marmisha

Новичок
Сообщения
41
Репутация
2
В справке как-то заумно все, объясните проще, как при нажатии
Код:
$Button1 = GUICtrlCreateButton
произвести выбор .тхт файла?
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Для примера вот так :
Код:
#include <GUIConstants.au3>

GUICreate("My GUI") 
$Button = GUICtrlCreateButton ("Выберите файл",  10, 30, 150,40)
GUISetState ()       

While 1
$msg = GUIGetMsg()
Select 
  Case $msg = $Button 
      $sFile = FileOpenDialog("Выберите файл","C:\","Текстовый файл (*.txt)")
  Case $msg = $GUI_EVENT_CLOSE 
      ExitLoop
  EndSelect
WEnd
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Для примера можно открыть выбранный файл:

Код:
#include <GUIConstants.au3>

GUICreate("My GUI") 
$Button = GUICtrlCreateButton ("Выберите файл",  10, 30, 150,40)
GUISetState ()       

While 1
$msg = GUIGetMsg()
Select 
  Case $msg = $Button 
      $sFile = FileOpenDialog("Выберите файл","C:\","Текстовый файл (*.txt)")
      ShellExecute($sFile) 
  Case $msg = $GUI_EVENT_CLOSE 
      ExitLoop
  EndSelect
WEnd
 
Автор
M

marmisha

Новичок
Сообщения
41
Репутация
2
Вы опережаете мои мысли, только начал смотреть, как открыть файл :smile:. А как заставить .тхт файл показать свое содержимое в графическом окне?
И еще, почему-то при нажатии на кнопку "Логины" окно выбора файла появляется, а при нажатии на кнопку "Пароли" ничего не происходит. :-\
Код:
While 1
$msg = GUIGetMsg()
Select
  Case $msg = $Button1
     FileOpenDialog("Логины","C:\","Текстовый файл (*.txt)")
  Case $msg = $GUI_EVENT_CLOSE
      ExitLoop
  EndSelect
  WEnd
  While 2
$msg1 = GUIGetMsg()
Select
  Case $msg1 = $Button2
     FileOpenDialog("Пароли","C:\","Текстовый файл (*.txt)")
  Case $msg1 = $GUI_EVENT_CLOSE
      ExitLoop
  EndSelect
WEnd
 

VladUs

Скриптер
Сообщения
621
Репутация
181
marmisha [?]
А как заставить .тхт файл показать свое содержимое в графическом окне?
Код:
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>

$gui = GUICreate("My GUI") 
$Button = GUICtrlCreateButton ("Выберите файл",  10, 30, 150,40)
$input = GUICtrlCreateInput ("", 30,  100, 300, 250,BitOr($GUI_SS_DEFAULT_INPUT, $ES_MULTILINE))
GUISetState ()       

While 1
$msg = GUIGetMsg()
Select 
Case $msg = $Button 
   $sFile  =  FileOpenDialog("Выберите файл","C:\","Текстовый файл (*.txt)")
   $file = FileOpen($sFile)
   $fileread = FileRead($file)
   GUICtrlSetData ( $input, $fileread )
   FileClose($file)
Case $msg = $GUI_EVENT_CLOSE 
   ExitLoop
EndSelect
   
WEnd
 
Автор
M

marmisha

Новичок
Сообщения
41
Репутация
2
Что-то начало получаться, только почему-то после выбора тхт файлов с логинами и паролями скрипт не идет дальше, подскажите в чем проблема и как присвоить окошкам с координатами введенные в них цифры?
Код:
#RequireAdmin
#include <File.au3>
#include <Array.au3>
; Задаем горячии клавиши
HotKeySet("{F1}", "Terminate")
Global $Paused
HotKeySet("{Del}", "TogglePause")
Func TogglePause()
    $Paused = Not $Paused
    While $Paused
    WEnd
    ToolTip("")
EndFunc   ; Пауза
Func Terminate()
    Exit 0
EndFunc   ;Выход из скрипта
; Создаем графическую оболочку
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=d:\разное\Языки программирования\autoit\koda_1.7.3.0\forms\Автологин графика.kxf
$Form1_1 = GUICreate("Автологин Lineage2", 648, 339, 183, 114)
$Label1 = GUICtrlCreateLabel("Введите список логинов", 48, 16, 129, 17)
$Login = GUICtrlCreateButton("Логины", 88, 40, 49, 25)
$Label2 = GUICtrlCreateLabel("Введите список паролей", 49, 81, 130, 17)
$Pass = GUICtrlCreateButton("Пароли", 89, 113, 49, 25)
$Label3 = GUICtrlCreateLabel("Координаты правой стороны поля Login", 24, 160, 207, 17)
$X = GUICtrlCreateInput("", 40, 200, 49, 21, BitOr($GUI_SS_DEFAULT_INPUT, $ES_MULTILINE))
$Y = GUICtrlCreateInput("", 168, 200, 49, 21, BitOr($GUI_SS_DEFAULT_INPUT, $ES_MULTILINE))
$Label4 = GUICtrlCreateLabel("Координаты правой стороны поля Password", 23, 248, 227, 17)
$Label5 = GUICtrlCreateLabel("Введенные логины-пароли", 376, 8, 140, 17)
$LoginPass = GUICtrlCreateEdit("", 304, 40, 305, 273, BitOr($GUI_SS_DEFAULT_INPUT, $ES_MULTILINE))
$Label6 = GUICtrlCreateLabel("X=", 20, 203, 17, 17)
$Label8 = GUICtrlCreateLabel("Y=", 148, 203, 17, 17)
$X1 = GUICtrlCreateInput("", 40, 283, 49, 21, BitOr($GUI_SS_DEFAULT_INPUT, $ES_MULTILINE))
$Y1 = GUICtrlCreateInput("", 168, 283, 49, 21, BitOr($GUI_SS_DEFAULT_INPUT, $ES_MULTILINE))
$Label7 = GUICtrlCreateLabel("X1=", 20, 286, 23, 17)
$Label9 = GUICtrlCreateLabel("Y1=", 148, 286, 23, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
$msg = GUIGetMsg()
Select
Case $msg = $Login
$aLogins  =  FileOpenDialog("Выберите файл","C:\","Текстовый файл (*.txt)")
_FileReadToArray('login.txt', $aLogins) ;файл с логинами
Case $msg = $Pass
$aPasswords =  FileOpenDialog("Выберите файл","C:\","Текстовый файл (*.txt)")
_FileReadToArray('pass.txt', $aPasswords);файл с паролями
Case $msg = $GUI_EVENT_CLOSE
   ExitLoop
EndSelect
WEnd
Dim $aLogins, $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($i & ":" & $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) ; после всех циклов записи закрываем файл
 

joiner

Модератор
Локальный модератор
Сообщения
3 372
Репутация
589
marmisha
ты хочешь из открываемого файла вставить пароль или логин в GUICtrlCreateEdit ?
я сделал так
Код:
Case $msg = $Login
$aLogins  =  FileOpenDialog("Выберите файл","C:\","Текстовый файл (*.txt)")
$1 = FileRead($aLogins)
GUICtrlSetData ($LoginPass,$1)

marmisha [?]
как присвоить окошкам с координатами введенные в них цифры?
тут не пойму что нужно? чтобы были постоянные цифры при запуске или чтобы вводились из файла?
 
Автор
M

marmisha

Новичок
Сообщения
41
Репутация
2
тут не пойму что нужно? чтобы были постоянные цифры при запуске или чтобы вводились из файла?
В основном окне есть 4 окошка для ввода координат (Х, Y, Х1,Y1). По этим координатам будет производится кликанье мышкой. Примерно так:
Код:
MouseClick("left", X, Y, 2, 0)
 

joiner

Модератор
Локальный модератор
Сообщения
3 372
Репутация
589
marmisha
ты хочешь чтобы при запуске скрипта в окошках уже были координаты или при выборе определенного пароля появлялись координаты?
если первое то так
Код:
$X = GUICtrlCreateInput("1", 40, 200, 49, 21, BitOr($GUI_SS_DEFAULT_INPUT, $ES_MULTILINE))

если второе, то смотри справку по IniWriteSection , IniReadSection
 
Автор
M

marmisha

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

"Логины"-список логинов (.тхт) построчно
"Пароли"-список паролей (.тхт) построчно
Координаты правой стороны поля Login X, Y (эти данные вписываем мы сами)
Координаты правой стороны поля Password X1, Y1 (эти данные вписываем мы сами)
"Веденные логин-пароль" - отображаются введенные логин-пароль через ":" из списков "Логины" "Пароли".
Часть скрипта с момента
Код:
$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($i & ":" & $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) ; после всех циклов записи закрываем файл
рабочая 100%.
 

joiner

Модератор
Локальный модератор
Сообщения
3 372
Репутация
589
marmisha ты уж извини, но мне до сих пор не понятно для чего тебе этот скрипт. что он должен делать от первой до последней точки
зачем в нем запись событий в файл? записывает он из окон координат и поля пароль-логин или для чего эти поля? ну и так далее. по пунктам
 
Автор
M

marmisha

Новичок
Сообщения
41
Репутация
2
marmisha ты уж извини, но мне до сих пор не понятно для чего тебе этот скрипт. что он должен делать от первой до последней точки
зачем в нем запись событий в файл? записывает он из окон координат и поля пароль-логин или для чего эти поля? ну и так далее. по пунктам
С помощью данного скрипта производится автоматический ввод логина-пароля в поля главного окна онлайн игры. Сам скрипт готов и работает, но без графической оболочки. Если какие-то данные нужно изменить, приходиться открывать скрипт и менять все руками. Графическая оболочка позволит вводить данные без вмешательства в скрипт, тем более после компиляции в .ехе это будет не возможно. Да и красивее будет :D
Запись событий в файл нужно для отслеживания введенных логин-паролей, при открытии данного файла можно посмотреть какие пароли-логины вводились.
 
Верх