Что нового

[Мышь, клавиатура] Нужно увеличить функционал существующего автокликера

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
Код:
#include <Misc.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>

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

$GUI = GUICreate("Кликер", 455, 190)
$InpDownUp = GUICtrlCreateInput("", 5, 5, 50, 20, 0x2000)
GUICtrlSetData(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "DownUpDelay", "5"))
GUICtrlCreateLabel("задержка в миллисекундах между нажатием и отпусканием кнопки мыши", 60, 5, 380, 20, 0x0200)
$InpClicks = GUICtrlCreateInput("", 5, 30, 50, 20, 0x2000)
GUICtrlSetData(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "ClicksDelay", "30"))
GUICtrlCreateLabel("задержка в миллисекундах между одиночными кликами", 60, 30, 380, 20, 0x0200)
$InpFirst = GUICtrlCreateInput("", 5, 55, 50, 20, 0x2000)
GUICtrlSetData(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "FirstDelay", "100"))
GUICtrlCreateLabel("задержка в миллисекундах после первого клика", 60, 55, 380, 20, 0x0200)
$InpLBtn = GUICtrlCreateCheckbox("Левая кнопка (Shift+F1)", 5, 85, 150, 20)
GUICtrlSetState(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Buttons", "Left", "4"))
$InpRBtn = GUICtrlCreateCheckbox("Правая кнопка (Shift+F2)", 160, 85, 140, 20)
GUICtrlSetState(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Buttons", "Right", "4"))
$InpKey = GUICtrlCreateCheckbox("Код клавиши (Shift+F3)", 5, 115, 140, 20)
GUICtrlSetState(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Buttons", "Key", "4"))
$InpCode = GUICtrlCreateInput("", 160, 115, 25, 20)
GUICtrlSetLimit(-1, 2)
GUICtrlSetData(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Buttons", "Code", "20"))
GUICtrlCreateLabel("Pause  -  установка/снятие кликера с паузы", 5, 145, 230, 20, 0x0200)
GUICtrlCreateLabel("Shift+ESC  -  прекращение работы скрипта", 5, 165, 230, 20, 0x0200)
$BtnStart = GUICtrlCreateButton("Готово", 350, 85, 100, 100)
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))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Buttons", "Left", GUICtrlRead($InpLBtn))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Buttons", "Right", GUICtrlRead($InpRBtn))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Buttons", "Key", GUICtrlRead($InpKey))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Buttons", "Code", GUICtrlRead($InpCode))
      ExitLoop
  EndSwitch
Until 0

Global $DownUpDelay =  GUICtrlRead($InpDownUp)
Global $ClicksDelay = GUICtrlRead($InpClicks)
Global $FirstDelay = GUICtrlRead($InpFirst)
Global $Left = GUICtrlRead($InpLBtn) = 1
Global $Right = GUICtrlRead($InpRBtn) = 1
Global $Key = GUICtrlRead($InpKey) = 1
Global $Code = GUICtrlRead($InpCode)
Global $Llock, $Rlock, $Klock, $Start = True
GUIDelete($GUI)

HotKeySet("+{F1}", "LOnOff")
HotKeySet("+{F2}", "ROnOff")
HotKeySet("+{F3}", "KOnOff")
HotKeySet("^{F1}", "Llock")
HotKeySet("^{F2}", "Rlock")
HotKeySet("^{F3}", "Klock")

Do
  If $Start Then
    ClickPress("01")
    ClickPress("02")
    ClickPress($Code)
  EndIf
  Sleep(10)
Until 0

Func ClickPress($Btn)
  If _IsPressed($Btn) Then
    $Timer = TimerInit()
    Do
      If Not _IsPressed($Btn) Then ExitLoop
      Sleep(10)
    Until TimerDiff($Timer) > $FirstDelay
    If Not _IsPressed($Btn) Then
      Return
    Else
      $tPoint = _WinAPI_GetMousePos()
      $hWin = _WinAPI_WindowFromPoint($tPoint)
      _WinAPI_ScreenToClient($hWin, $tPoint)
      Switch $Btn
        Case "01", "02"
          Do
            Switch $Btn
              Case "01"
                If $Left Then
                  LeftDownUp($hWin, $tPoint.X, $tPoint.Y, $DownUpDelay)
                Else
                  If $Llock And Not _IsPressed("01") Then MouseDown("left")
                EndIf
              Case "02"
                If $Right Then
                  RightDownUp($hWin, $tPoint.X, $tPoint.Y, $DownUpDelay)
                Else
                  If $Rlock And Not _IsPressed("02") Then MouseDown("right")
                EndIf
            EndSwitch
          Until Not _IsPressed($Btn)
          $Llock = False
          $Rlock = False
        Case Else
          Do
            If $Key Then
              KeyPress($hWin, $Btn)
            Else
              If $Klock And Not _IsPressed($Btn) Then _WinAPI_Keybd_Event("0x" & $Btn, 0)
            EndIf
          Until Not _IsPressed($Btn)
          $Klock = False
      EndSwitch
      Sleep($ClicksDelay)
    EndIf
  EndIf
EndFunc

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))
  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 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 KeyPress($hWnd, $Code)
  _WinAPI_PostMessage($hWnd, $WM_KEYDOWN, "0x" & $Code, 0)
  Sleep($DownUpDelay)
  _WinAPI_PostMessage($hWnd, $WM_KEYUP, "0x" & $Code, 0)
EndFunc

Func Start()
  $Start = Not $Start
EndFunc

Func Quit()
  Exit
EndFunc

Func LOnOff()
  $Left = Not $Left
EndFunc

Func ROnOff()
  $Right = Not $Right
EndFunc

Func KOnOff()
  $Key = Not $Key
EndFunc

Func Llock()
  $Llock = True
  MouseDown("left")
EndFunc

Func Rlock()
  $Rlock = True
  MouseDown("right")
EndFunc

Func Klock()
  $Klock = True
  _WinAPI_Keybd_Event("0x" & $Code, 0)
EndFunc
 
Автор
P

Perfix23

Новичок
Сообщения
19
Репутация
0
inververs
Да, именно про это Я и говорил. Спасибо.

InnI
InnI сказал(а):
Код:
#include <Misc.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>

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

$GUI = GUICreate("Кликер", 455, 190)
$InpDownUp = GUICtrlCreateInput("", 5, 5, 50, 20, 0x2000)
GUICtrlSetData(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "DownUpDelay", "5"))
GUICtrlCreateLabel("задержка в миллисекундах между нажатием и отпусканием кнопки мыши", 60, 5, 380, 20, 0x0200)
$InpClicks = GUICtrlCreateInput("", 5, 30, 50, 20, 0x2000)
GUICtrlSetData(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "ClicksDelay", "30"))
GUICtrlCreateLabel("задержка в миллисекундах между одиночными кликами", 60, 30, 380, 20, 0x0200)
$InpFirst = GUICtrlCreateInput("", 5, 55, 50, 20, 0x2000)
GUICtrlSetData(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "FirstDelay", "100"))
GUICtrlCreateLabel("задержка в миллисекундах после первого клика", 60, 55, 380, 20, 0x0200)
$InpLBtn = GUICtrlCreateCheckbox("Левая кнопка (Shift+F1)", 5, 85, 150, 20)
GUICtrlSetState(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Buttons", "Left", "4"))
$InpRBtn = GUICtrlCreateCheckbox("Правая кнопка (Shift+F2)", 160, 85, 140, 20)
GUICtrlSetState(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Buttons", "Right", "4"))
$InpKey = GUICtrlCreateCheckbox("Код клавиши (Shift+F3)", 5, 115, 140, 20)
GUICtrlSetState(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Buttons", "Key", "4"))
$InpCode = GUICtrlCreateInput("", 160, 115, 25, 20)
GUICtrlSetLimit(-1, 2)
GUICtrlSetData(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Buttons", "Code", "20"))
GUICtrlCreateLabel("Pause  -  установка/снятие кликера с паузы", 5, 145, 230, 20, 0x0200)
GUICtrlCreateLabel("Shift+ESC  -  прекращение работы скрипта", 5, 165, 230, 20, 0x0200)
$BtnStart = GUICtrlCreateButton("Готово", 350, 85, 100, 100)
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))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Buttons", "Left", GUICtrlRead($InpLBtn))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Buttons", "Right", GUICtrlRead($InpRBtn))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Buttons", "Key", GUICtrlRead($InpKey))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Buttons", "Code", GUICtrlRead($InpCode))
      ExitLoop
  EndSwitch
Until 0

Global $DownUpDelay =  GUICtrlRead($InpDownUp)
Global $ClicksDelay = GUICtrlRead($InpClicks)
Global $FirstDelay = GUICtrlRead($InpFirst)
Global $Left = GUICtrlRead($InpLBtn) = 1
Global $Right = GUICtrlRead($InpRBtn) = 1
Global $Key = GUICtrlRead($InpKey) = 1
Global $Code = GUICtrlRead($InpCode)
Global $Llock, $Rlock, $Klock, $Start = True
GUIDelete($GUI)

HotKeySet("+{F1}", "LOnOff")
HotKeySet("+{F2}", "ROnOff")
HotKeySet("+{F3}", "KOnOff")
HotKeySet("^{F1}", "Llock")
HotKeySet("^{F2}", "Rlock")
HotKeySet("^{F3}", "Klock")

Do
  If $Start Then
    ClickPress("01")
    ClickPress("02")
    ClickPress($Code)
  EndIf
  Sleep(10)
Until 0

Func ClickPress($Btn)
  If _IsPressed($Btn) Then
    $Timer = TimerInit()
    Do
      If Not _IsPressed($Btn) Then ExitLoop
      Sleep(10)
    Until TimerDiff($Timer) > $FirstDelay
    If Not _IsPressed($Btn) Then
      Return
    Else
      $tPoint = _WinAPI_GetMousePos()
      $hWin = _WinAPI_WindowFromPoint($tPoint)
      _WinAPI_ScreenToClient($hWin, $tPoint)
      Switch $Btn
        Case "01", "02"
          Do
            Switch $Btn
              Case "01"
                If $Left Then
                  LeftDownUp($hWin, $tPoint.X, $tPoint.Y, $DownUpDelay)
                Else
                  If $Llock And Not _IsPressed("01") Then MouseDown("left")
                EndIf
              Case "02"
                If $Right Then
                  RightDownUp($hWin, $tPoint.X, $tPoint.Y, $DownUpDelay)
                Else
                  If $Rlock And Not _IsPressed("02") Then MouseDown("right")
                EndIf
            EndSwitch
          Until Not _IsPressed($Btn)
          $Llock = False
          $Rlock = False
        Case Else
          Do
            If $Key Then
              KeyPress($hWin, $Btn)
            Else
              If $Klock And Not _IsPressed($Btn) Then _WinAPI_Keybd_Event("0x" & $Btn, 0)
            EndIf
          Until Not _IsPressed($Btn)
          $Klock = False
      EndSwitch
      Sleep($ClicksDelay)
    EndIf
  EndIf
EndFunc

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))
  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 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 KeyPress($hWnd, $Code)
  _WinAPI_PostMessage($hWnd, $WM_KEYDOWN, "0x" & $Code, 0)
  Sleep($DownUpDelay)
  _WinAPI_PostMessage($hWnd, $WM_KEYUP, "0x" & $Code, 0)
EndFunc

Func Start()
  $Start = Not $Start
EndFunc

Func Quit()
  Exit
EndFunc

Func LOnOff()
  $Left = Not $Left
EndFunc

Func ROnOff()
  $Right = Not $Right
EndFunc

Func KOnOff()
  $Key = Not $Key
EndFunc

Func Llock()
  $Llock = True
  MouseDown("left")
EndFunc

Func Rlock()
  $Rlock = True
  MouseDown("right")
EndFunc
Func Klock()
  $Klock = True
  _WinAPI_Keybd_Event("0x" & $Code, 0)
EndFunc
В этой версии кликера, почему-то игнорируется значение задержек. Т.е. не зависимо какую Я установил задержку между нажатием и отпусканием кнопки или задержку между одиночными кликами, скрипт все равно работает на самой минимальной задержке, грубо говоря на 1 миллисекунде.

Код:
#include <Misc.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>

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

$GUI = GUICreate("Кликер", 455, 190)
$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)
$InpLBtn = GUICtrlCreateCheckbox("Левая кнопка (Shift+F1)", 5, 85, 150, 20)
GUICtrlSetState(-1, Int(IniRead(@ScriptDir & "\DelaySets.ini", "Buttons", "Left", "4")))
$InpRBtn = GUICtrlCreateCheckbox("Правая кнопка (Shift+F2)", 160, 85, 140, 20)
GUICtrlSetState(-1, Int(IniRead(@ScriptDir & "\DelaySets.ini", "Buttons", "Right", "4")))
$InpKey = GUICtrlCreateCheckbox("Код клавиши (Shift+F3)", 5, 115, 140, 20)
GUICtrlSetState(-1, Int(IniRead(@ScriptDir & "\DelaySets.ini", "Buttons", "Key", "4")))
$InpCode = GUICtrlCreateInput("", 160, 115, 25, 20)
GUICtrlSetLimit(-1, 2)
GUICtrlSetData(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Buttons", "Code", "20"))
GUICtrlCreateLabel("Pause  -  установка/снятие кликера с паузы", 5, 145, 230, 20, 0x0200)
GUICtrlCreateLabel("Shift+ESC  -  прекращение работы скрипта", 5, 165, 230, 20, 0x0200)
$BtnStart = GUICtrlCreateButton("Готово", 350, 135, 100, 50)
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))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Buttons", "Left", GUICtrlRead($InpLBtn))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Buttons", "Right", GUICtrlRead($InpRBtn))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Buttons", "Key", GUICtrlRead($InpKey))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Buttons", "Code", GUICtrlRead($InpCode))
      ExitLoop
  EndSwitch
Until 0

Global $DownUpDelay =  GUICtrlRead($InpDownUp)
Global $ClicksDelay = GUICtrlRead($InpClicks)
Global $FirstDelay = GUICtrlRead($InpFirst)
Global $Left = GUICtrlRead($InpLBtn) = 1
Global $Right = GUICtrlRead($InpRBtn) = 1
Global $Key = GUICtrlRead($InpKey) = 1
Global $Code = GUICtrlRead($InpCode)
Global $Start = True
Global $Llock = True
Global $Rlock = True
Global $Klock = False
GUIDelete($GUI)

HotKeySet("+{F1}", "LOnOff")
HotKeySet("+{F2}", "ROnOff")
HotKeySet("+{F3}", "KOnOff")
HotKeySet("^{F1}", "Llock")
HotKeySet("^{F2}", "Rlock")
HotKeySet("^{F3}", "Klock")

Do
  If $Start Then
    If $Left Then ClickPress("01")
    If $Right Then ClickPress("02")
    If $Key Then ClickPress($Code)
  EndIf
  Sleep(10)
Until 0

Func ClickPress($Btn)
  If _IsPressed($Btn) Then
    $Timer = TimerInit()
    Do
      If Not _IsPressed($Btn) Then ExitLoop
      Sleep(10)
    Until TimerDiff($Timer) > $FirstDelay
    If Not _IsPressed($Btn) Then
      Return
    Else
      Switch $Btn
        Case "01", "02"
          Do
            $tPoint = _WinAPI_GetMousePos()
            $hWin = _WinAPI_WindowFromPoint($tPoint)
            _WinAPI_ScreenToClient($hWin, $tPoint)
            Switch $Btn
              Case "01"
                LeftDownUp($hWin, $tPoint.X, $tPoint.Y, $DownUpDelay)
              Case "02"
                RightDownUp($hWin, $tPoint.X, $tPoint.Y, $DownUpDelay)
            EndSwitch
            Sleep($ClicksDelay)
          Until Not _IsPressed($Btn)
        Case Else
          Do
            _WinAPI_Keybd_Event("0x" & $Btn, 0)
            Sleep($DownUpDelay)
            _WinAPI_Keybd_Event("0x" & $Btn, 2)
            Sleep($ClicksDelay)
          Until Not _IsPressed($Btn)
          If $Klock Then _WinAPI_Keybd_Event("0x" & $Btn, 0)
      EndSwitch
    EndIf
  EndIf
EndFunc

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))
  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 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

Func LOnOff()
  $Left = Not $Left
EndFunc

Func ROnOff()
  $Right = Not $Right
EndFunc

Func KOnOff()
  $Key = Not $Key
EndFunc

Func Llock()
  If $Llock Then
    MouseDown("left")
  Else
    MouseUp("left")
  EndIf
EndFunc

Func Rlock()
  If $Rlock Then
    MouseDown("right")
  Else
    MouseUp("right")
  EndIf
EndFunc

Func Klock()
  $Klock = Not $Klock
  If $Klock Then
    _WinAPI_Keybd_Event("0x" & $Code, 0)
  Else
    _WinAPI_Keybd_Event("0x" & $Code, 2)
  EndIf
EndFunc
А нельзя ли в этом скрипте, только поправить функциональность пробела по примеру работы, уже отлично функционирующих ЛКМ и ПКМ?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Народ, а хотите я закрою эту тему, чтобы не было соблазна дальше исправлять код?
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
Perfix23
игнорируется значение задержек
Код:
#include <Misc.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>

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

$GUI = GUICreate("Кликер", 455, 190)
$InpDownUp = GUICtrlCreateInput("", 5, 5, 50, 20, 0x2000)
GUICtrlSetData(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "DownUpDelay", "5"))
GUICtrlCreateLabel("задержка в миллисекундах между нажатием и отпусканием кнопки мыши", 60, 5, 380, 20, 0x0200)
$InpClicks = GUICtrlCreateInput("", 5, 30, 50, 20, 0x2000)
GUICtrlSetData(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "ClicksDelay", "30"))
GUICtrlCreateLabel("задержка в миллисекундах между одиночными кликами", 60, 30, 380, 20, 0x0200)
$InpFirst = GUICtrlCreateInput("", 5, 55, 50, 20, 0x2000)
GUICtrlSetData(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "FirstDelay", "100"))
GUICtrlCreateLabel("задержка в миллисекундах после первого клика", 60, 55, 380, 20, 0x0200)
$InpLBtn = GUICtrlCreateCheckbox("Левая кнопка (Shift+F1)", 5, 85, 150, 20)
GUICtrlSetState(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Buttons", "Left", "4"))
$InpRBtn = GUICtrlCreateCheckbox("Правая кнопка (Shift+F2)", 160, 85, 140, 20)
GUICtrlSetState(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Buttons", "Right", "4"))
$InpKey = GUICtrlCreateCheckbox("Код клавиши (Shift+F3)", 5, 115, 140, 20)
GUICtrlSetState(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Buttons", "Key", "4"))
$InpCode = GUICtrlCreateInput("", 160, 115, 25, 20)
GUICtrlSetLimit(-1, 2)
GUICtrlSetData(-1, IniRead(@ScriptDir & "\DelaySets.ini", "Buttons", "Code", "20"))
GUICtrlCreateLabel("Pause  -  установка/снятие кликера с паузы", 5, 145, 230, 20, 0x0200)
GUICtrlCreateLabel("Shift+ESC  -  прекращение работы скрипта", 5, 165, 230, 20, 0x0200)
$BtnStart = GUICtrlCreateButton("Готово", 350, 85, 100, 100)
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))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Buttons", "Left", GUICtrlRead($InpLBtn))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Buttons", "Right", GUICtrlRead($InpRBtn))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Buttons", "Key", GUICtrlRead($InpKey))
      IniWrite(@ScriptDir & "\DelaySets.ini", "Buttons", "Code", GUICtrlRead($InpCode))
      ExitLoop
  EndSwitch
Until 0

Global $DownUpDelay =  GUICtrlRead($InpDownUp)
Global $ClicksDelay = GUICtrlRead($InpClicks)
Global $FirstDelay = GUICtrlRead($InpFirst)
Global $Left = GUICtrlRead($InpLBtn) = 1
Global $Right = GUICtrlRead($InpRBtn) = 1
Global $Key = GUICtrlRead($InpKey) = 1
Global $Code = GUICtrlRead($InpCode)
Global $Llock, $Rlock, $Klock, $Start = True
GUIDelete($GUI)

HotKeySet("+{F1}", "LOnOff")
HotKeySet("+{F2}", "ROnOff")
HotKeySet("+{F3}", "KOnOff")
HotKeySet("^{F1}", "Llock")
HotKeySet("^{F2}", "Rlock")
HotKeySet("^{F3}", "Klock")

Do
  If $Start Then
    ClickPress("01")
    ClickPress("02")
    ClickPress($Code)
  EndIf
  Sleep(10)
Until 0

Func ClickPress($Btn)
  If _IsPressed($Btn) Then
    $Timer = TimerInit()
    Do
      If Not _IsPressed($Btn) Then ExitLoop
      Sleep(10)
    Until TimerDiff($Timer) > $FirstDelay
    If Not _IsPressed($Btn) Then
      Return
    Else
      $tPoint = _WinAPI_GetMousePos()
      $hWin = _WinAPI_WindowFromPoint($tPoint)
      _WinAPI_ScreenToClient($hWin, $tPoint)
      Switch $Btn
        Case "01", "02"
          Do
            Switch $Btn
              Case "01"
                If $Left Then
                  LeftDownUp($hWin, $tPoint.X, $tPoint.Y, $DownUpDelay)
                Else
                  If $Llock And Not _IsPressed("01") Then MouseDown("left")
                EndIf
              Case "02"
                If $Right Then
                  RightDownUp($hWin, $tPoint.X, $tPoint.Y, $DownUpDelay)
                Else
                  If $Rlock And Not _IsPressed("02") Then MouseDown("right")
                EndIf
            EndSwitch
          Until Not _IsPressed($Btn)
          $Llock = False
          $Rlock = False
        Case Else
          Do
            If $Key Then
              KeyPress($hWin, $Btn)
            Else
              If $Klock And Not _IsPressed($Btn) Then _WinAPI_Keybd_Event("0x" & $Btn, 0)
            EndIf
          Until Not _IsPressed($Btn)
          $Klock = False
      EndSwitch
    EndIf
  EndIf
EndFunc

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))
  Sleep($Sleep)
  _WinAPI_PostMessage($hWnd, $WM_LBUTTONUP, 0, _WinAPI_MakeLong($X, $Y))
  _WinAPI_PostMessage($hWnd, $WM_SETCURSOR, $hWnd, _WinAPI_MakeLong($HTCLIENT, $WM_LBUTTONUP))
  Sleep($ClicksDelay)
EndFunc

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))
  Sleep($ClicksDelay)
EndFunc

Func KeyPress($hWnd, $Code)
  _WinAPI_PostMessage($hWnd, $WM_KEYDOWN, "0x" & $Code, 0)
  Sleep($DownUpDelay)
  _WinAPI_PostMessage($hWnd, $WM_KEYUP, "0x" & $Code, 0)
  Sleep($ClicksDelay)
EndFunc

Func Start()
  $Start = Not $Start
EndFunc

Func Quit()
  Exit
EndFunc

Func LOnOff()
  $Left = Not $Left
EndFunc

Func ROnOff()
  $Right = Not $Right
EndFunc

Func KOnOff()
  $Key = Not $Key
EndFunc

Func Llock()
  $Llock = True
  MouseDown("left")
EndFunc

Func Rlock()
  $Rlock = True
  MouseDown("right")
EndFunc
Func Klock()
  $Klock = True
  _WinAPI_Keybd_Event("0x" & $Code, 0)
EndFunc

поправить функциональность пробела
После нажатия Ctrl+F3 система сообщает, что клавиша НАЖАТА. Возможно, ваше приложение не реагирует на удержание клавиши, а обрабатывает нажатия/отпускания. Потому что, когда вы нажимаете на клавиатуре клавишу, драйвер клавиатуры начинает имитировать нажатия/отпускания с частотой, указанной в настройках Windows.

Yashied [?]
закрою эту тему
Что ему помешает создать новую?
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
Yashied
чтобы не было соблазна
Наличие соблазна не является нарушением правил форума. А закрыть тему волевым решением - так это ваше право.
 
Автор
P

Perfix23

Новичок
Сообщения
19
Репутация
0
InnI
Огромнейшее спасибо за проделанную работу, за Ваши усилия и стремление помочь.
 
Верх