Что нового

[Мышь, клавиатура] Нужен скрипт который быстро имитироет нажатие клавиши мыши при ее зажатии

Perfix23

Новичок
Сообщения
19
Репутация
0
Версия AutoIt: 3.3.12.0
Описание: Нужен скрипт/программа, при котором, например, Я зажал правую кнопку мыши и скрипт начинает производить имитации клика правой кнопки мыши с установленной скоростью, остановиться действие скрипта должно после отжатия правой кнопки мыши. Нужен для игр.
Примечания: Т.е мне нужен скрипт/программа которая будет подобна скрипту http://cscontrol.ru/load/0-0-0-2767-20, он при зажатии пробела начинает производить имитации нажатие пробела, с большой скоростью. Мне же нужно точно такой же, но чтобы горячей клавишей была правая кнопка мыши (если будет возможность смены клавиши, например на ЛКМ или на любую из клавиатуры, будет еще лучше). В скрипте, на который Я скинул ссылку, присутствует небольшая задержка перед началом имитации, она не обязательна, но желательно ее присутствие. Буду очень признателен за помощь.
 

Вложения

  • ultimate.rar
    197.5 КБ · Просмотры: 16

Ksaan

Знающий
Сообщения
207
Репутация
15
Re: [Мышь, клавиатура] Нужен скрипт который будет имитировать нажатие клавиши мыши при ее зажатии

Что-то такое?
Код:
#include <MouseOnEvent.au3>

Global $Paused = True

_MouseSetOnEvent($MOUSE_PRIMARYDOWN_EVENT, "Pause")
_MouseSetOnEvent($MOUSE_PRIMARYUP_EVENT, "Pause")

While 1
  If Not $Paused Then
     $pos = MouseGetPos()
     MouseClick("left", $pos[0] , $pos[1] , 0)
     Sleep(200)
  Else
    Sleep(10)
  EndIf
WEnd

Func Pause()
  $Paused = Not $Paused
EndFunc

Только хз как он будет в игре работать, я делал себе макросы для warface и там вместо MouseClick ставил на Send
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Автор
P

Perfix23

Новичок
Сообщения
19
Репутация
0
Re: [Мышь, клавиатура] Нужен скрипт который будет имитировать нажатие клавиши мыши при ее зажатии

Ksaan сказал(а):
Что-то такое?
Код:
#include <MouseOnEvent.au3>

Global $Paused = True

_MouseSetOnEvent($MOUSE_PRIMARYDOWN_EVENT, "Pause")
_MouseSetOnEvent($MOUSE_PRIMARYUP_EVENT, "Pause")

While 1
  If Not $Paused Then
     $pos = MouseGetPos()
     MouseClick("left", $pos[0] , $pos[1] , 0)
     Sleep(200)
  Else
    Sleep(10)
  EndIf
WEnd

Func Pause()
  $Paused = Not $Paused
EndFunc

Только кто его знает как он будет в игре работать, я делал себе макросы для warface и там вместо MouseClick ставил на Send

Огромное спасибо за ответ. Не сочти за наглость, возможно ли преобразить этот код в программу (.exe)? Дело в том, что отсутствие моих знаний в этой области не позволит мне использовать твой код в качестве решения моей проблемы. За ранние благодарен.


Добавлено:
Сообщение автоматически объединено:

madmasles сказал(а):
[warn]Оформите, пожалуйста, тему в соответствии с Правилами обязательного оформления тем в разделе "Стол заказов"

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






Приношу свои глубочайшие извинения. Изменил вид темы, согласно правилам. Жду с нетерпением ответа.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Perfix23
Дело в том, что отсутствие моих знаний в этой области не позволит мне использовать твой код в качестве решения моей проблемы.
Скачал бы себе AutoIt да и всё...

возможно ли преобразить этот код в программу (.exe)?
Вот, скачивай. :smile: mouse_clicker.exe
 
Автор
P

Perfix23

Новичок
Сообщения
19
Репутация
0
alex33 сказал(а):
Perfix23
Дело в том, что отсутствие моих знаний в этой области не позволит мне использовать твой код в качестве решения моей проблемы.
Скачал бы себе AutoIt да и всё...

возможно ли преобразить этот код в программу (.exe)?
Вот, скачивай. :smile: mouse_clicker.exe

Дело в том, что у меня есть autoit и при включении скрипта у меня выдавало ошибку. :( И все же твой mouse_clicker.exe не делает ни каких действий при его активировании, кроме как отображения иконки скрипта в трее. В чем может быть проблема? ;)
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Re: [Мышь, клавиатура] Нужен скрипт который быстро имитироет нажатие мыши

например на ЛКМ или на любую из клавиатуры, будет еще лучше

Код:
Global $FireFlag = False

HotKeySet("{F11}", "_FireOn")
HotKeySet("{F12}", "_FireOff")

While 1
	If $FireFlag Then MouseClick("left")
	Sleep(100)
WEnd

Func _FireOn()
  $FireFlag = True
EndFunc

Func _FireOff()
  $FireFlag = False
EndFunc
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Perfix23
Вот в этой теме Нужен простейший автокликер для мыши делали кликеры.
Переделал свой кликер на правую кнопку мыши
Код:
#include <Misc.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>

HotKeySet("{PAUSE}", "Start")
HotKeySet("+{ESC}", "Quit")

$GUI = GUICreate("Кликер", 455, 105)
$InpDownUp = GUICtrlCreateInput("", 5, 5, 50, 20, 0x2000)
GUICtrlSetData(-1, Abs(Int(IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "DownUpDelay", "5"))))
GUICtrlCreateLabel("задержка в миллисекундах между нажатием и отпусканием кнопки мыши", 60, 5, 380, 20, 0x0200)
$InpClicks = GUICtrlCreateInput("", 5, 30, 50, 20, 0x2000)
GUICtrlSetData(-1, Abs(Int(IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "ClicksDelay", "30"))))
GUICtrlCreateLabel("задержка в миллисекундах между одиночными кликами", 60, 30, 380, 20, 0x0200)
GUICtrlCreateLabel("Pause  -  установка/снятие кликера с паузы", 5, 55, 230, 20, 0x0200)
GUICtrlCreateLabel("Shift+ESC  -  прекращение работы скрипта", 5, 80, 230, 20, 0x0200)
$BtnStart = GUICtrlCreateButton("Готово", 350, 55, 100, 45)
GUISetState()

Do
  Switch GUIGetMsg()
    Case -3
      Exit
    Case $BtnStart
      IniWrite(@ScriptDir & "\DelaySets.ini", "Delay", "DownUpDelay", GUICtrlRead($InpDownUp))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Delay", "ClicksDelay", GUICtrlRead($InpClicks))
      ExitLoop
  EndSwitch
Until 0

Global $DownUpDelay =  GUICtrlRead($InpDownUp)
Global $ClicksDelay = GUICtrlRead($InpClicks)
Global $Start = True
GUIDelete($GUI)

Do
  If $Start Then
    If _IsPressed("02") Then
      Do
        $tPoint = _WinAPI_GetMousePos()
        $hWin = _WinAPI_WindowFromPoint($tPoint)
        _WinAPI_ScreenToClient($hWin, $tPoint)
        RightDownUp($hWin, $tPoint.X, $tPoint.Y, $DownUpDelay)
        Sleep($ClicksDelay)
      Until Not _IsPressed("02")
    EndIf
  EndIf
  Sleep(10)
Until 0

Func RightDownUp($hWnd, $X, $Y, $Sleep = 0)
  _WinAPI_PostMessage($hWnd, $WM_RBUTTONDOWN, 0, _WinAPI_MakeLong($X, $Y))
  _WinAPI_PostMessage($hWnd, $WM_SETCURSOR, $hWnd, _WinAPI_MakeLong($HTCLIENT, $WM_RBUTTONDOWN))
  Sleep($Sleep)
  _WinAPI_PostMessage($hWnd, $WM_RBUTTONUP, 0, _WinAPI_MakeLong($X, $Y))
  _WinAPI_PostMessage($hWnd, $WM_SETCURSOR, $hWnd, _WinAPI_MakeLong($HTCLIENT, $WM_RBUTTONUP))
EndFunc

Func Start()
  $Start = Not $Start
EndFunc

Func Quit()
  Exit
EndFunc
 
Автор
P

Perfix23

Новичок
Сообщения
19
Репутация
0
InnI сказал(а):
Perfix23
Вот в этой теме Нужен простейший автокликер для мыши делали кликеры.
Переделал свой кликер на правую кнопку мыши
Код:
#include <Misc.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>

HotKeySet("{PAUSE}", "Start")
HotKeySet("+{ESC}", "Quit")

$GUI = GUICreate("Кликер", 455, 105)
$InpDownUp = GUICtrlCreateInput("", 5, 5, 50, 20, 0x2000)
GUICtrlSetData(-1, Abs(Int(IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "DownUpDelay", "5"))))
GUICtrlCreateLabel("задержка в миллисекундах между нажатием и отпусканием кнопки мыши", 60, 5, 380, 20, 0x0200)
$InpClicks = GUICtrlCreateInput("", 5, 30, 50, 20, 0x2000)
GUICtrlSetData(-1, Abs(Int(IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "ClicksDelay", "30"))))
GUICtrlCreateLabel("задержка в миллисекундах между одиночными кликами", 60, 30, 380, 20, 0x0200)
GUICtrlCreateLabel("Pause  -  установка/снятие кликера с паузы", 5, 55, 230, 20, 0x0200)
GUICtrlCreateLabel("Shift+ESC  -  прекращение работы скрипта", 5, 80, 230, 20, 0x0200)
$BtnStart = GUICtrlCreateButton("Готово", 350, 55, 100, 45)
GUISetState()

Do
  Switch GUIGetMsg()
    Case -3
      Exit
    Case $BtnStart
      IniWrite(@ScriptDir & "\DelaySets.ini", "Delay", "DownUpDelay", GUICtrlRead($InpDownUp))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Delay", "ClicksDelay", GUICtrlRead($InpClicks))
      ExitLoop
  EndSwitch
Until 0

Global $DownUpDelay =  GUICtrlRead($InpDownUp)
Global $ClicksDelay = GUICtrlRead($InpClicks)
Global $Start = True
GUIDelete($GUI)

Do
  If $Start Then
    If _IsPressed("02") Then
      Do
        $tPoint = _WinAPI_GetMousePos()
        $hWin = _WinAPI_WindowFromPoint($tPoint)
        _WinAPI_ScreenToClient($hWin, $tPoint)
        LeftDownUp($hWin, $tPoint.X, $tPoint.Y, $DownUpDelay)
        Sleep($ClicksDelay)
      Until Not _IsPressed("02")
    EndIf
  EndIf
  Sleep(10)
Until 0

Func LeftDownUp($hWnd, $X, $Y, $Sleep = 0)
  _WinAPI_PostMessage($hWnd, $WM_LBUTTONDOWN, 0, _WinAPI_MakeLong($X, $Y))
  _WinAPI_PostMessage($hWnd, $WM_SETCURSOR, $hWnd, _WinAPI_MakeLong($HTCLIENT, $WM_LBUTTONDOWN))
  If $Sleep Then Sleep($Sleep)
  _WinAPI_PostMessage($hWnd, $WM_LBUTTONUP, 0, _WinAPI_MakeLong($X, $Y))
  _WinAPI_PostMessage($hWnd, $WM_SETCURSOR, $hWnd, _WinAPI_MakeLong($HTCLIENT, $WM_LBUTTONUP))
EndFunc

Func Start()
  $Start = Not $Start
EndFunc

Func Quit()
  Exit
EndFunc

Моих навыков хватает только на понимание первых восьми строчек кода, а вот чтоб поменять на пкм у меня составляет непреодолимую задачу. Протестировав скрипт что ты скинул, выяснилось, что он начинает работу от зажатия пкм, а имитирует "клаканье" лкм. Мне же нужно чтоб от зажатия пкм, начинались клики тоже пкм, до отжатия этой клавиши. Если тебя не затруднит, будь добр, смени на пкм. За ранние благодарен.
 
Автор
P

Perfix23

Новичок
Сообщения
19
Репутация
0
InnI сказал(а):

Превосходно. Спасибо большое. Не сочти за дерзость, но у меня есть просьба. Возможно ли дополнить мой кликер функцией, которую Я описывал в начале темы, а именно, добавить небольшую задержку (желательно регулируемую, такую как, в моем кликере, "задержка в миллисекундах между одиночными кликами" и поле для заполнения, в интерфейсе при активации) перед началом процесса "кликанья" правой кнопки мыши? Объясню на примере: Я зажал правую кнопку мыши, скрипт дал один клик правой кнопки мыши, далее следует задержка которая будет выставляться в при запуске скрипта, после чего происходит само "кликанье" (которое уже превосходно работает), и в конце, "кликанье" должно остановиться после моего отжатия правой кнопки мыши. Думаю звучит запутанно, но буду благодарен, даже от твоей попытки сделать эту функцию. :smile:
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Perfix23
Пробуйте
Код:
#include <Misc.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>

HotKeySet("{PAUSE}", "Start")
HotKeySet("+{ESC}", "Quit")

$GUI = GUICreate("Кликер", 455, 135)
$InpDownUp = GUICtrlCreateInput("", 5, 5, 50, 20, 0x2000)
GUICtrlSetData(-1, Abs(Int(IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "DownUpDelay", "5"))))
GUICtrlCreateLabel("задержка в миллисекундах между нажатием и отпусканием кнопки мыши", 60, 5, 380, 20, 0x0200)
$InpClicks = GUICtrlCreateInput("", 5, 30, 50, 20, 0x2000)
GUICtrlSetData(-1, Abs(Int(IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "ClicksDelay", "30"))))
GUICtrlCreateLabel("задержка в миллисекундах между одиночными кликами", 60, 30, 380, 20, 0x0200)
$InpFirst = GUICtrlCreateInput("", 5, 55, 50, 20, 0x2000)
GUICtrlSetData(-1, Abs(Int(IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "FirstDelay", "100"))))
GUICtrlCreateLabel("задержка в миллисекундах после первого клика", 60, 55, 380, 20, 0x0200)
GUICtrlCreateLabel("Pause  -  установка/снятие кликера с паузы", 5, 85, 230, 20, 0x0200)
GUICtrlCreateLabel("Shift+ESC  -  прекращение работы скрипта", 5, 110, 230, 20, 0x0200)
$BtnStart = GUICtrlCreateButton("Готово", 350, 85, 100, 45)
GUISetState()

Do
  Switch GUIGetMsg()
    Case -3
      Exit
    Case $BtnStart
      IniWrite(@ScriptDir & "\DelaySets.ini", "Delay", "DownUpDelay", GUICtrlRead($InpDownUp))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Delay", "ClicksDelay", GUICtrlRead($InpClicks))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Delay", "FirstDelay", GUICtrlRead($InpFirst))
      ExitLoop
  EndSwitch
Until 0

Global $DownUpDelay =  GUICtrlRead($InpDownUp)
Global $ClicksDelay = GUICtrlRead($InpClicks)
Global $FirstDelay = GUICtrlRead($InpFirst)
Global $Start = True
GUIDelete($GUI)

Do
  If $Start Then
    If _IsPressed("02") Then
      $Timer = TimerInit()
      Do
        If Not _IsPressed("02") Then ExitLoop
        Sleep(10)
      Until TimerDiff($Timer) > $FirstDelay
      If Not _IsPressed("02") Then
        ContinueLoop
      Else
        Do
          $tPoint = _WinAPI_GetMousePos()
          $hWin = _WinAPI_WindowFromPoint($tPoint)
          _WinAPI_ScreenToClient($hWin, $tPoint)
          RightDownUp($hWin, $tPoint.X, $tPoint.Y, $DownUpDelay)
          Sleep($ClicksDelay)
        Until Not _IsPressed("02")
      EndIf
    EndIf
  EndIf
  Sleep(10)
Until 0

Func RightDownUp($hWnd, $X, $Y, $Sleep = 0)
  _WinAPI_PostMessage($hWnd, $WM_RBUTTONDOWN, 0, _WinAPI_MakeLong($X, $Y))
  _WinAPI_PostMessage($hWnd, $WM_SETCURSOR, $hWnd, _WinAPI_MakeLong($HTCLIENT, $WM_RBUTTONDOWN))
  Sleep($Sleep)
  _WinAPI_PostMessage($hWnd, $WM_RBUTTONUP, 0, _WinAPI_MakeLong($X, $Y))
  _WinAPI_PostMessage($hWnd, $WM_SETCURSOR, $hWnd, _WinAPI_MakeLong($HTCLIENT, $WM_RBUTTONUP))
EndFunc

Func Start()
  $Start = Not $Start
EndFunc

Func Quit()
  Exit
EndFunc
 
Автор
P

Perfix23

Новичок
Сообщения
19
Репутация
0
InnI сказал(а):
Perfix23
Пробуйте
Код:
#include <Misc.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>

HotKeySet("{PAUSE}", "Start")
HotKeySet("+{ESC}", "Quit")

$GUI = GUICreate("Кликер", 455, 135)
$InpDownUp = GUICtrlCreateInput("", 5, 5, 50, 20, 0x2000)
GUICtrlSetData(-1, Abs(Int(IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "DownUpDelay", "5"))))
GUICtrlCreateLabel("задержка в миллисекундах между нажатием и отпусканием кнопки мыши", 60, 5, 380, 20, 0x0200)
$InpClicks = GUICtrlCreateInput("", 5, 30, 50, 20, 0x2000)
GUICtrlSetData(-1, Abs(Int(IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "ClicksDelay", "30"))))
GUICtrlCreateLabel("задержка в миллисекундах между одиночными кликами", 60, 30, 380, 20, 0x0200)
$InpFirst = GUICtrlCreateInput("", 5, 55, 50, 20, 0x2000)
GUICtrlSetData(-1, Abs(Int(IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "FirstDelay", "100"))))
GUICtrlCreateLabel("задержка в миллисекундах после первого клика", 60, 55, 380, 20, 0x0200)
GUICtrlCreateLabel("Pause  -  установка/снятие кликера с паузы", 5, 85, 230, 20, 0x0200)
GUICtrlCreateLabel("Shift+ESC  -  прекращение работы скрипта", 5, 110, 230, 20, 0x0200)
$BtnStart = GUICtrlCreateButton("Готово", 350, 85, 100, 45)
GUISetState()

Do
  Switch GUIGetMsg()
    Case -3
      Exit
    Case $BtnStart
      IniWrite(@ScriptDir & "\DelaySets.ini", "Delay", "DownUpDelay", GUICtrlRead($InpDownUp))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Delay", "ClicksDelay", GUICtrlRead($InpClicks))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Delay", "FirstDelay", GUICtrlRead($InpFirst))
      ExitLoop
  EndSwitch
Until 0

Global $DownUpDelay =  GUICtrlRead($InpDownUp)
Global $ClicksDelay = GUICtrlRead($InpClicks)
Global $FirstDelay = GUICtrlRead($InpFirst)
Global $Start = True
GUIDelete($GUI)

Do
  If $Start Then
    If _IsPressed("02") Then
      Sleep($FirstDelay)
      Do
        $tPoint = _WinAPI_GetMousePos()
        $hWin = _WinAPI_WindowFromPoint($tPoint)
        _WinAPI_ScreenToClient($hWin, $tPoint)
        RightDownUp($hWin, $tPoint.X, $tPoint.Y, $DownUpDelay)
        Sleep($ClicksDelay)
      Until Not _IsPressed("02")
    EndIf
  EndIf
  Sleep(10)
Until 0

Func RightDownUp($hWnd, $X, $Y, $Sleep = 0)
  _WinAPI_PostMessage($hWnd, $WM_RBUTTONDOWN, 0, _WinAPI_MakeLong($X, $Y))
  _WinAPI_PostMessage($hWnd, $WM_SETCURSOR, $hWnd, _WinAPI_MakeLong($HTCLIENT, $WM_RBUTTONDOWN))
  Sleep($Sleep)
  _WinAPI_PostMessage($hWnd, $WM_RBUTTONUP, 0, _WinAPI_MakeLong($X, $Y))
  _WinAPI_PostMessage($hWnd, $WM_SETCURSOR, $hWnd, _WinAPI_MakeLong($HTCLIENT, $WM_RBUTTONUP))
EndFunc

Func Start()
  $Start = Not $Start
EndFunc

Func Quit()
  Exit
EndFunc

Все функционирует, но теперь есть маленькая проблемка. Например: Я выставил значение 1000 ms, т.е. 1 секунду, в "задержка в миллисекундах после первого клика", и когда нажимаю (не зажимаю, а именно кликаю один раз) на правую кнопку мыши, скрипт все равно делает второй клик по истечению выставленной мной секунды. Данная проблема негативно влияет на игру.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Re: [Мышь, клавиатура] Нужен скрипт который быстро имитироет нажатие мыши

Слушайте! Ну как у вас получается писать в этой теме?!
У меня ругается что нужно ввести название темы не более 80 символов.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Perfix23
Отредактировал "Ответ #11". Пробуйте.

C2H5OH [?]
У меня тоже ругается, но только в предпросмотре и в форме полного ответа (т.е. там, где есть поле с названием темы). А вот из формы быстрого ответа можно отправлять без "ругательств".
 
Автор
P

Perfix23

Новичок
Сообщения
19
Репутация
0
InnI сказал(а):
Perfix23
Отредактировал "Ответ #11". Пробуйте.

Примите мои восхищения. Благодарен за Вашу работу и труд. Все превосходным образом работает. Я полагаю, в моем положении что-либо простить, будет нагло, но не могли бы Вы, скомпилировать получившийся скрипт в формат .exe?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Perfix23 [?]
скомпилировать получившийся скрипт в формат .exe
Если вы можете данный скрипт запустить, то сможете и скомпилировать. Либо в меню редактора выбираете "Tools" - "Compile Ctrl+F7", либо во всплывающем меню файла скрипта выбираете "Compile Script".
 
Автор
P

Perfix23

Новичок
Сообщения
19
Репутация
0
InnI сказал(а):
Perfix23 [?]
скомпилировать получившийся скрипт в формат .exe
Если вы можете данный скрипт запустить, то сможете и скомпилировать. Либо в меню редактора выбираете "Tools" - "Compile Ctrl+F7", либо во всплывающем меню файла скрипта выбираете "Compile Script".

Прошу прощения за мое незнание. Выражаю еще раз, мои восхищения и благодарность. Всего доброго и удачи.
 
Верх