Что нового

Клик мыши по координатам из файла, С периодичностью тоже из файла.

muhomo

Новичок
Сообщения
1
Репутация
0
Версия AutoIt:
3.3.8.1

Описание:
Только начал знакомство с автоитом. Соответственно есть цель:
1) Создать GUI для ввода данных и записи в файл.
2) Клик мыши по координатам из файла.

Цель:
В Gui вносится значение для "sleep" (обязательно ли записывать в файл? Можно ли просто значение подставлять в дальнейший макрос?)
Затем происходит клик мыши в определенный координат, нужного мне окна, по очереди (наверное построчно) из файла.
Клик мыши должен происходить: Нажал, передвинул на 40 пикселей вниз и отпустил.

Примечания:
Учусь и редактирую пошагово , что получилось.
ура научился сдвигать мышь относительно текущего положения. :laugh:

Код:
WinActivate("[Title:***]")
AutoItSetOption("MouseCoordMode", 2)
;Клик мышой
MouseMove ( 29, 123 , 0 )
MouseDown ("left")
Sleep(600)
MouseMove ( MouseGetPos(0), MouseGetPos(1)+40 , 0 )
mouseup("left")
;Конец кликанья мышой
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Вот так вы хотели?
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$GUI = GUICreate("GUImouse", 243, 114, 365, 278)
$Lab1 = GUICtrlCreateLabel("Значения для Sleep = ", 0, 0, 115, 17)
$SleepV = GUICtrlCreateInput("", 115, 0, 121, 18)
$Lab2 = GUICtrlCreateLabel("Значение позиции Y =", 0, 64, 116, 17)
$Xp = GUICtrlCreateInput("", 120, 32, 121, 18)
$Lab3 = GUICtrlCreateLabel("Значение позиции X =", 0, 32, 116, 17)
$Yp = GUICtrlCreateInput("", 120, 64, 121, 18)
$Write = GUICtrlCreateButton("Записать", 0, 88, 75, 25)
$Execute = GUICtrlCreateButton("Выполнить", 88, 88, 75, 25)
GUISetState(@SW_SHOW,$GUI)
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $Execute
			__Execute()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Write
			__WriteFile()
	EndSwitch
WEnd
Func __Execute()
	WinActivate("[Title:***]")
	Opt("MouseCoordMode",2)
	Local $Who[3]=[IniRead("PosMouse.ini","data","X",''),IniRead("PosMouse.ini","data","Y",''),GUICtrlRead($SleepV)]
	MouseMove($Who[0],$Who[1],1);Перемещает курсор по координатам
	MouseDown("Left");Зажимает левой кнопкой
	Sleep($Who[2]);Пауза указанная в GUI окне(не из файла)
	Local $Pos=MouseGetPos();Определение позиции курсора в массив
	MouseMove($Pos[0],$Pos[1]+40,1);Перемещение курсора в низ на 40 пикселей
	MouseUp("Left");Отпускание левой кнопки
EndFunc
Func __WriteFile()
	Local $Read[2]=[GUICtrlRead($Xp),GUICtrlRead($Yp)];Чтение в массив информации из GUI
	IniWrite("PosMouse.ini","data","X",$Read[0]);Запись в файл информации в стиле ini-файлов
	IniWrite("PosMouse.ini","data","Y",$Read[1])
EndFunc

Если вам нужно читать значения для Sleep из файла то могу исправить.
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Во как... :IL_AutoIt_1:

ЗЫ: на ошибки не проверял...

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Global $FileStep = @ScriptDir & '\stepmouse.ini'

$FormGUI = GUICreate("GUI for Muhomo", 249, 477, 535, 171)
	$G_Step = GUICtrlCreateGroup("StepIng", 8, 8, 233, 121)
	$L_StepID = GUICtrlCreateLabel("Step #", 161, 27, 36, 17)
	$I_StepID = GUICtrlCreateInput("", 200, 24, 33, 21)
		GUICtrlSetState(-1, $GUI_DISABLE)
	$I_StepX = GUICtrlCreateInput("", 40, 56, 65, 21)
	$L_StepXY = GUICtrlCreateLabel(":", 108, 58, 7, 17)
	$I_StepY = GUICtrlCreateInput("", 113, 56, 65, 21)
		$B_StepSave = GUICtrlCreateButton("Save", 152, 88, 75, 25)
			GUICtrlCreateGroup("", -99, -99, 1, 1)

	$E_Log = GUICtrlCreateEdit("", 8, 136, 233, 273)
		GUICtrlSetState(-1, $GUI_DISABLE)

	$L_Sleep = GUICtrlCreateLabel("Sleep", 55, 418, 31, 17)
		$I_Sleep = GUICtrlCreateInput("100", 88, 416, 65, 21)
	$L_SleepC = GUICtrlCreateLabel("(in milliseconds).", 157, 418, 80, 17)

	$B_StepGO = GUICtrlCreateButton("Go Step's", 160, 440, 75, 25)
		GUICtrlSetState(-1, $GUI_DISABLE)
	$B_StepCLEAR = GUICtrlCreateButton("Clear Step's", 10, 440, 75, 25)
		GUICtrlSetState(-1, $GUI_DISABLE)

GUISetState(@SW_SHOW)

_RunSCR()

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $B_StepSave
			_StepSave()
		Case $B_StepGO
			_StepGO()
		Case $B_StepCLEAR
			_StepCLEAR()
	EndSwitch
WEnd

Func _RunSCR()
	$IRSN = IniReadSectionNames($FileStep)
	If @error Then
		GUICtrlSetData($I_StepID, 1)
	Else
		For $i_IRSN = 1 To $IRSN[0]
			$IRS = IniReadSection($FileStep, $IRSN[$i_IRSN])
			For $i_IRS = 1 To $IRS[0][0]
				GUICtrlSetData($E_Log, 'Step# '&$IRSN[$i_IRSN]&' = '&$IRS[$i_IRS][0]&' : '&$IRS[$i_IRS][1]&@CRLF, $i_IRSN)
			Next
		Next
		GUICtrlSetData($I_StepID, $IRSN[0]+1)

		GUICtrlSetState($B_StepGO, $GUI_ENABLE)
		GUICtrlSetState($B_StepCLEAR, $GUI_ENABLE)
	EndIf
EndFunc

Func _StepSave()
	If (StringStripWS(GUICtrlRead($I_StepX),8)) And (StringStripWS(GUICtrlRead($I_StepY),8)) Then
		IniWriteSection($FileStep, GUICtrlRead($I_StepID), StringStripWS(GUICtrlRead($I_StepX),8)&'='&StringStripWS(GUICtrlRead($I_StepY),8)&@LF)

		GUICtrlSetData($I_StepX,'')
		GUICtrlSetData($I_StepY,'')

		GUICtrlSetData($E_Log,'')
		_RunSCR()
	EndIf
EndFunc

Func _StepGO()
	$WinTitle = "[CLASS:Notepad]"
	If WinExists($WinTitle) Then
		WinActivate($WinTitle)
		AutoItSetOption("MouseCoordMode", 2)
		If (StringStripWS(GUICtrlRead($I_Sleep),8)) Then
			$I_Sleep = GUICtrlRead($I_Sleep)
		Else
			$I_Sleep = 100
		EndIf
		$IRSN = IniReadSectionNames($FileStep)
		If @error Then

		Else
			For $i_IRSN = 1 To $IRSN[0]
				$IRS = IniReadSection($FileStep, $IRSN[$i_IRSN])
				For $i_IRS = 1 To $IRS[0][0]
					MouseMove($IRS[$i_IRS][0], $IRS[$i_IRS][1], 15)
						MouseDown("left")
					MouseMove($IRS[$i_IRS][0], $IRS[$i_IRS][1]+40, 15)
						MouseUp("left")
					Sleep($I_Sleep)
				Next
			Next
		EndIf
	Else
		MsgBox(16, 'ERROR', 'Window "'&$WinTitle&'" NOT exists !!!')
	EndIf
EndFunc

Func _StepCLEAR()
	If FileDelete($FileStep) Then
		GUICtrlSetData($E_Log,'')
		_RunSCR()

		GUICtrlSetState($B_StepGO, $GUI_DISABLE)
		GUICtrlSetState($B_StepCLEAR, $GUI_DISABLE)
	EndIf
EndFunc

Замените только на нужное окно (81 строка):
Код:
$WinTitle = "[CLASS:Notepad]"
 
Верх