Что нового

[Автоматизация] Циключные щелчки мыши по неизвестным заранее кординатами

Viktor217

Осваивающий
Сообщения
233
Репутация
31
Здравствуйте, вот хотел написать скрипт, который будет автоматически щелкать левой клавишей мыши по заданным координатам. При нажимании определённой клавиши(Хотелось бы... У себя я сделал к каждой координате свою кнопку) определяется текущая координата курсора(Этих координат нам нужно 11 штук, все отличны друг от друга).
Дальше уже по определённым координатам совершаются клики, с задержкой 50 милисекунд. Всё это включается нажатием клавиши F7.
Если кто играет в Point Blank, для них объяснение:
Нужен скрипт, который будет приглашать всех в комнату...
Вот мои наброски, но они не работают, вообще никак)=
Код:
#include <Misc.au3>
Opt("MouseCoordMode",0)
Opt("MouseClickDelay",50)
Global $f=0,$dll=DllOpen("user32.dll"),$start=0
HotKeySet("{F7}","start")
Func start()
	If $start=0 Then
		$start=1
	Else
		$start=0
	EndIf
EndFunc
While 1
	If $start=1 Then
		If $f=0 Then
			If _IsPressed("7a",$dll) Then
				$pos1=MouseGetPos()
			EndIf
			If _IsPressed("78",$dll) Then
				$pos2=MouseGetPos()
			EndIf
			If _IsPressed("63",$dll) Then
				$pos3=MouseGetPos()
			EndIf
			If _IsPressed("76",$dll) Then
				$pos4=MouseGetPos()
			EndIf
			If _IsPressed("62",$dll) Then
				$pos5=MouseGetPos()
			EndIf
			If _IsPressed("6e",$dll) Then
				$pos6=MouseGetPos()
			EndIf
			If _IsPressed("6d",$dll) Then
				$pos7=MouseGetPos()
			EndIf
			If _IsPressed("2c",$dll) Then
				$pos8=MouseGetPos()
			EndIf
			If _IsPressed("2e",$dll) Then
				$pos9=MouseGetPos()
			EndIf
			If _IsPressed("2f",$dll) Then
				$pos10=MouseGetPos()
			EndIf
			If _IsPressed("6c",$dll) Then
				$pos11=MouseGetPos()
				$f+=1
			EndIf
		Else
			Sleep(100)
			MouseClick("Left",$pos1[0],$pos1[1])
			MouseClick("Left",$pos2[0],$pos2[1])
			MouseClick("Left",$pos3[0],$pos3[1])
			MouseClick("Left",$pos4[0],$pos4[1])
			MouseClick("Left",$pos5[0],$pos5[1])
			MouseClick("Left",$pos6[0],$pos6[1])
			MouseClick("Left",$pos7[0],$pos7[1])
			MouseClick("Left",$pos8[0],$pos8[1])
			MouseClick("Left",$pos9[0],$pos9[1])
			MouseClick("Left",$pos10[0],$pos10[1])
			MouseClick("Left",$pos11[0],$pos11[1])
		EndIf
	EndIf
WEnd

Вот картинка, только здесь нету места одиннадцатого клика и боковые цифры неправильно заданы, вместо 1 должна быть два, вместо двух три и т.д.:
da7ec0f84366.jpg
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Вместо кодов клавиш у тебя коды ASCII символов
Имхо много If, луче уж Select Case EndSelect.
Вот короткий примерчик. В MouseClick специально поставил "right" для наглядности.
Код:
;коды клавиш
; 5A Z key
; 58 X key
; 43 C key
; 56 V key
;42 B key
; 1B ESC key

#include <Misc.au3>
$dll = DllOpen("user32.dll")

While 1
    Sleep (25)
	Select
	Case _IsPressed("5a", $dll)
			$pos=MouseGetPos()
			MouseClick("right",$pos[0],$pos[1])					
		Case _IsPressed("58", $dll)
			$pos=MouseGetPos()
			MouseClick("right",$pos[0],$pos[1])
		Case _IsPressed("43", $dll)
			$pos=MouseGetPos()
			MouseClick("right",$pos[0],$pos[1])
		Case _IsPressed("56", $dll)
			$pos=MouseGetPos()
			MouseClick("right",$pos[0],$pos[1])
		Case _IsPressed("42", $dll)
			$pos=MouseGetPos()
			MouseClick("right",$pos[0],$pos[1])
		Case _IsPressed("1b", $dll);жмем на ESC
			ExitLoop ; и выходим	
	EndSelect
WEnd
DllClose($dll)
 
Автор
V

Viktor217

Осваивающий
Сообщения
233
Репутация
31
Спасибо конечно, но это не совсем то что нужно...
Я себе представляю это так:
1. Пользователь нажимает горячую клавишу, скрипт запускается, записываются первые 11 щелчков мыши. Если пользователь допустил ошибку он нажимает горячую клавишу, скрипт останавливается, нажимает вновь и он запускается.
2. Дальше эти одиннадцать кликов выполняются сами, разумеется с задержками(=
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Viktor217
Все понятно (и про горячие клавиши, и про паузу), кроме этого
При нажимании определённой клавиши определяется текущая координата курсора(Этих координат нам нужно 11 штук, все отличны друг от друга). Дальше уже по определённым координатам совершаются клики
Получается, что при нажатии любой из перечисленных клавиш, клик произойдет по текущей координате курсора,
а не той что нужно. В чем смысл?
Хм. Вроде понял, что ты хотел:
Пользователь запустил скрипт
навел курсор на 1 координату и нажал горячую клавишу, чтобы запомнить ее
координата запомнилась
навел курсор на 2 координату и нажал горячую клавишу, чтобы запомнить ее
координата запомнилась
и так для 11 координат
Затем пользователь жмет некую горячую клавишу и начинаются клики по запомненным 11 координатам
Такая что ли задумка была?
 
Автор
V

Viktor217

Осваивающий
Сообщения
233
Репутация
31
Пользователь нажимает клавишу, определяется текущее положение курсора, дальше когда все координаты записаны скрипт повторяет все записанные клики, по порядку разумеется...
Я кстати не знаю, правильно ли это вообще(=
 
Автор
V

Viktor217

Осваивающий
Сообщения
233
Репутация
31
Да, именно такая была задумка(=
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
?
Код:
;коды клавиш
; 5A Z key
; 58 X key
; 43 C key
; 56 V key
;42 B key
; 1B ESC key

#include <Misc.au3>
$dll = DllOpen("user32.dll")

While 1
    Sleep (25)
    Select
    Case _IsPressed("5a", $dll);z
            $pos1=MouseGetPos()                
        Case _IsPressed("58", $dll);x
            $pos2=MouseGetPos()            
        Case _IsPressed("43", $dll);c
            $pos3=MouseGetPos()            
        Case _IsPressed("56", $dll);v
            $pos4=MouseGetPos()            
        Case _IsPressed("42", $dll);b
            $pos5=MouseGetPos()            
        Case _IsPressed("1b", $dll);жмем на ESC (начнутся клики)
            ExitLoop ; и выходим
    EndSelect
WEnd
DllClose($dll)


MouseClick("right",$pos1[0],$pos1[1])
MouseClick("right",$pos2[0],$pos2[1])
MouseClick("right",$pos3[0],$pos3[1])
MouseClick("right",$pos4[0],$pos4[1])
MouseClick("right",$pos5[0],$pos5[1])
 

SyDr

Сидра
Сообщения
651
Репутация
158
Код:
#include <Misc.au3>
Opt("MouseCoordMode",0)
Opt("MouseClickDelay",50)
Global $dll=DllOpen("user32.dll")
Global $f = False
Global $start = False
Global $aCoord[11][2]
Global $iNum

HotKeySet("{F7}","start")
HotKeySet("{ESC}","_exit")


Func start()
   $start = Not $start
EndFunc

While 1
	If Not $start Then
		Sleep(10)
		ContinueLoop
	EndIf

	If Not $f Then
		For $iNum = 0 To 10
			While Not _IsPressed(1, $dll)
				Sleep(10)
			WEnd

			$aCoord[$iNum][0] = MouseGetPos(0)
			$aCoord[$iNum][1] = MouseGetPos(1)

			While _IsPressed(1, $dll)
				Sleep(10)
			WEnd
		Next
		start()
		$f = True
	EndIf

	For $iNum = 0 To 10
		MouseClick("left", $aCoord[$iNum][0], $aCoord[$iNum][1], 1, 10)
		Sleep(10)
		start()
	Next
WEnd

Func _exit()
	DllOpen($dll)
	Exit
EndFunc


Also, исправь название темы, а то раздражает.
 
Автор
V

Viktor217

Осваивающий
Сообщения
233
Репутация
31
SyDr сказал(а):
Код:
#include <Misc.au3>
Opt("MouseCoordMode",0)
Opt("MouseClickDelay",50)
Global $dll=DllOpen("user32.dll")
Global $f = False
Global $start = False
Global $aCoord[11][2]
Global $iNum

HotKeySet("{F7}","start")
HotKeySet("{ESC}","_exit")


Func start()
   $start = Not $start
EndFunc

While 1
	If Not $start Then
		Sleep(10)
		ContinueLoop
	EndIf

	If Not $f Then
		For $iNum = 0 To 10
			While Not _IsPressed(1, $dll)
				Sleep(10)
			WEnd

			$aCoord[$iNum][0] = MouseGetPos(0)
			$aCoord[$iNum][1] = MouseGetPos(1)

			While _IsPressed(1, $dll)
				Sleep(10)
			WEnd
		Next
		start()
		$f = True
	EndIf

	For $iNum = 0 To 10
		MouseClick("left", $aCoord[$iNum][0], $aCoord[$iNum][1], 1, 10)
		Sleep(10)
		start()
	Next
WEnd

Func _exit()
	DllOpen($dll)
	Exit
EndFunc


Also, исправь название темы, а то раздражает.

А как в этом скрипте увеличить кол-во повторов последующих кликов...
 

SyDr

Сидра
Сообщения
651
Репутация
158
Код:
For $iNum = 0 To 10
        MouseClick("left", $aCoord[$iNum][0], $aCoord[$iNum][1], 1, 10)
        Sleep(10)
        start()
    Next

Замени на:
Код:
For $iNum = 0 To 10
        MouseClick("left", $aCoord[$iNum][0], $aCoord[$iNum][1], 1, 10)
        Sleep(10)
    Next
    Sleep(40)


Правда я вопрос не особо догнал :smile: Нужно, чтобы он эти действия повторял несколько раз?
 
Автор
V

Viktor217

Осваивающий
Сообщения
233
Репутация
31
Да, после "записи" координат кликов, они должны повторятся не один\два раза, а больше(=
 

SyDr

Сидра
Сообщения
651
Репутация
158
ТРи раза достаточно? Слишком абстрактно. Сколько раз кликать? n? Или пока не будет нажат другой хоткей?
 
Автор
V

Viktor217

Осваивающий
Сообщения
233
Репутация
31
Вообще желательно н или по нажатию первой горячей клавиши(=
 

SyDr

Сидра
Сообщения
651
Репутация
158
Код:
#include <Misc.au3>
Opt("MouseCoordMode",0)
Opt("MouseClickDelay",50)
Global $dll=DllOpen("user32.dll")
Global $f = False
Global $start = False
Global $aCoord[11][2]
Global $iNum
Global $iMax = 10, $iCurrent = 0

HotKeySet("{F7}","start")
HotKeySet("{ESC}","_exit")


Func start()
   $start = Not $start
   $iCurrent = 0
EndFunc

While 1
    If Not $start Then
        Sleep(10)
        ContinueLoop
    EndIf

    If Not $f Then
        For $iNum = 0 To 10
            While Not _IsPressed(1, $dll)
                Sleep(10)
            WEnd

            $aCoord[$iNum][0] = MouseGetPos(0)
            $aCoord[$iNum][1] = MouseGetPos(1)

            While _IsPressed(1, $dll)
                Sleep(10)
            WEnd
        Next
        $start = Not $start
        $f = True
		ContinueLoop
    EndIf

    For $iNum = 0 To 10
;~ 		If Not $start Then ExitLoop ; расскоментировать, чтобы по хоткею клики прекращались сразу
        MouseClick("left", $aCoord[$iNum][0], $aCoord[$iNum][1], 1, 10)
        Sleep(10)
    Next

	$iCurrent += 1
	If $iCurrent > $iMax Then
		$iCurrent = 0
		$start = Not $start
	EndIf

WEnd

Func _exit()
    DllClose($dll)
    Exit
EndFunc
 
Автор
V

Viktor217

Осваивающий
Сообщения
233
Репутация
31
SyDr, а как занести твой скрипт под условие?) А то у меня самостоятельно не получается, не очень понимаю скрипт, а при этом в скрипте присутствуют другие функции, которые этот скрипт "заглушает"
Пример:
Код:
While 1
	If $func1=1 Then
		Send("Ololo")
	Else
		MouseClick("Left",x,y)
	EndIf
	If $youScript=1 Then
		...
	EndIf
Wend
 

SyDr

Сидра
Сообщения
651
Репутация
158
Переменная $bStart автоматически изменяется после n прошедших кликов, либо после нажатия горячей клавиши.
Код:
#include <Misc.au3>
Opt("MouseCoordMode",0)
Opt("MouseClickDelay",50)

Global $sHotkeyStart = "{F7}"
Global $sHotkeyExit = "{ESC}"

Global $hDll=DllOpen("user32.dll")
Global $bStart = False
Global $aCoord[11][2]
Global $iNum
Global $iMax = 10, $iCurrent = 1

HotKeySet($sHotkeyStart, "Init")
HotKeySet($sHotkeyExit,"_Exit")

While 1
    If $bStart Then Click()
	Sleep(10)
WEnd

Func _Exit()
    DllClose($hDll)
    Exit
EndFunc


Func Click()
	For $iNum = 0 To 10
;~ 		If Not $bStart Then ExitLoop ; расскоментировать, чтобы по хоткею клики прекращались сразу
        MouseClick("left", $aCoord[$iNum][0], $aCoord[$iNum][1], 1, 10)
    Next

	$iCurrent += 1
	If $iCurrent > $iMax Then
		$iCurrent = 0
		Start_Pause()
	EndIf
EndFunc


Func Init()
	Local $iCount
	HotKeySet($sHotkeyStart)
	; инициализация. Первые 11 кликов.
	For $iCount = 0 To 10
		While Not _IsPressed(1, $hDll)
			Sleep(10)
		WEnd

		$aCoord[$iCount][0] = MouseGetPos(0)
		$aCoord[$iCount][1] = MouseGetPos(1)

		While _IsPressed(1, $hDll)
			Sleep(10)
		WEnd
	Next
	HotKeySet($sHotkeyStart, "Start_Pause")
	Start_Pause()
EndFunc

Func Start_Pause()
	$bStart = Not $bStart
EndFunc
 
Автор
V

Viktor217

Осваивающий
Сообщения
233
Репутация
31
SyDr, вот эти строчки нужно менять чтобы число кликов изменить?)
Код:
Global $aCoord[11][2] 
For $iNum = 0 To 10
 

SyDr

Сидра
Сообщения
651
Репутация
158
Да
Код:
Global $aCoord[<Число кликов>][2]


Код:
Func Click()
    For $iNum = 0 To 10

Поменяй на
Код:
Func Click()
    For $iNum = 0 To UBound($aCoord, 1) - 1

А
Код:
Func Init()
    Local $iCount
    HotKeySet($sHotkeyStart)
    ; инициализация. Первые 11 кликов.
    For $iCount = 0 To 10

На
Код:
Func Init()
    Local $iCount
    HotKeySet($sHotkeyStart)
    ; инициализация. Первые клики.
    For $iCount = 0 To UBound($aCoord, 1) - 1


При таком раскладе число кликов будет зависеть только от $aCoord
 
Автор
V

Viktor217

Осваивающий
Сообщения
233
Репутация
31
А как сделать, чтобы число кликов задавалось через инпут?)
Так не получается...
Код:
$aCoord[$click4][2]
$C4 = GUICtrlCreateInput("11", 1,1)
$click4 = GUICtrlRead($C4)

Пробовал добавлять что-то типа &>, не получилось)=
 
Верх