1 (изменено: TonyMontana, 2012-12-12 19:07:54)

Тема: AHK: Разная здержка для LButton в одном макросе

Доброго времени суток.
Поиск в гугле к вам привел.
Нужен скрип на разную скорость кликов LButton в одном скрипте.
Нашел на форуме почти то что нужно.

Нужно 2 режима в скрипте.

Режим 1:
Нажатие LButton с заданным интервалом, и возвратом курсора в начальную позицию.


Режим 2:
Нажатие и удержание RButton. При этом LButton нажимается с интервалом отличным от Режим 1, и соответсвенно скорость смещения курсора изменяется тоже.


Взял на форуме вот этот код:

Suspend On
Numpad2::
  Suspend Toggle
    if (!A_IsSuspended)
   {
    SoundBeep 2000, 400
   }
  Else
   {
    SoundBeep, 2000, 400
    SoundBeep, 2000, 400
   }
    return


~LButton::autofire()

autofire()

{
Loop
{
if GetKeyState("LButton", "P")
{
MouseClick, left,,,, 0, D
Sleep, 63
mouseXY(0, 3)
MouseClick, left,,,, 0, U
mouseXY(0, 1)
sleep, 63
}
else
break

} ;; loop
} ;; autofire()


mouseXY(x,y)
{
DllCall("mouse_event",uint,1,int,x,int,y,uint,0,int,0)
}

Лучше бы конечно было, при нажатии LButton запоминать текущее положение курсора, и при кликах возвращать его в исходное положение. ИМХО при помощи  MouseGetPos, или CoordMode, но сие к сожалению превосходит  предел моих возможностей в скриптинге.


Сделал следующее:

Numpad2::
NumpadDown::
   Loop, % (isEnable:=!isEnable)
      SoundBeep, 2000, 250
   KeyWait, % A_ThisHotkey
   Return


*LButton::autofire()
autofire()
{
Loop
{
if GetKeyState("LButton", "P")
{
MouseClick, left,,,,0, D
Sleep, 15
mouseXY(0, 5)
MouseClick, left,,,,0, U
mouseXY(0, 2)
sleep, 15
}
if GetKeyState("RButton", "P")
{
MouseClick, right,,,,,D
Keywait, Rbutton
MouseClick, left,,,,0, D
Sleep, 240
mouseXY(0, 1)
MouseClick, left,,,,0, U
mouseXY(0, 1)
sleep, 240
MouseClick, right,,,,,U
break
   }

} ;; loop
} ;; autofire()

mouseXY(x,y)
{
DllCall("mouse_event",uint,1,int,x,int,y,uint,0,int,0)
}

Работает косо.
Первый режим  - рабочий . А вот второй глючит. При зажимании RButton и зажиме LButton происходит одиночный клик. При втором нажатии LВutton, кликает в обычном режиме - интервал кликов и смещение курсора не работают. При отпускании RButton снова происходит одиночный клик.

Помогите пожалуйста довести до ума. С програмированием знаком поверхностно.

2 (изменено: TonyMontana, 2012-12-12 19:26:06)

Re: AHK: Разная здержка для LButton в одном макросе

Дело спсения утопающих...
Нашел вот такой вариант Режима2:

 LButton::
   Click Middle Down
   While GetKeyState("LButton", "P")
   {
      SendInput, {Click}
      Sleep, 100
   }
   Click Middle Up
   Return


Переделал под потребности.
По итогу доизвращался до вот такого варианта:


Numpad2::
NumpadDown::
   Loop, % (isEnable:=!isEnable)
      SoundBeep, 2000, 250
   KeyWait, % A_ThisHotkey
   Return

*LButton::autofire()

autofire()

{
Loop
{
if GetKeyState("LButton", "P")
{
MouseClick, left,,,1,0, D
Sleep, 15
mouseXY(0, 5)
MouseClick, left,,,1,0, U
mouseXY(0, 2)
sleep, 15
}
else
{
   Click Right Down
   if GetKeyState("LButton", "P")
   {
      MouseClick, left,,,1,0, D
Sleep, 240
mouseXY(0, 1)
MouseClick, left,,,1,0, U
mouseXY(0, 1)
sleep, 240
   Click Right Up
}
break
}

} ;; loop
} ;; autofire()


mouseXY(x,y)
{
DllCall("mouse_event",uint,1,int,x,int,y,uint,0,int,0)
}

Работает но есть два глюка.

1)При нажатии LButton и отпускании, автоматически включается RButton. Выключается повторным нажатием RButton
2)Во втором режиме (при зажатой RButton) клики LButton происходят с такой же скоростью  (15ms ) как и в первом режиме, а должны быть паузы по 240ms

Вариант с While GetKeyState после Click Right Down тоже глючит. Но немного по другому.

Думаю что ошибка где то в синтаксисе - хотя компилятор  не выдает ошибок.

Что я упустил из виду?

3 (изменено: TonyMontana, 2012-12-12 19:29:04)

Re: AHK: Разная здержка для LButton в одном макросе

ypppu пишет:
TonyMontana пишет:

Я далеко не пацан ушастый.

Это радует. Поймите и Вы нас.

Сделал как попросили.


Возвращаясь непосредственно к  теме:
Вот такой вариант есть сейчас.

Numpad2::
NumpadDown::
   Loop, % (isEnable:=!isEnable)
      SoundBeep, 2000, 250
   KeyWait, % A_ThisHotkey
   Return

*LButton::autofire()

autofire()

{
Loop
{
if GetKeyState("LButton", "P")
{
MouseClick, left,,,1,0, D
Sleep, 15
mouseXY(0, 5)
MouseClick, left,,,1,0, U
mouseXY(0, 2)
sleep,15
}
While Right Down
{  
   if GetKeyState("LButton", "P")
   {
      MouseClick, left,,,1,0, D
Sleep, 240
mouseXY(0, 1)
MouseClick, left,,,1,0, U
mouseXY(0, 1)
sleep, 240
   Click Right Up
}
else
break
}

} ;; loop
} ;; autofire()


mouseXY(x,y)
{
DllCall("mouse_event",uint,1,int,x,int,y,uint,0,int,0)
}

Из двух глюков в предидущем  посте, 1й исправил.

Осталась проблема номер 2:
Во втором режиме (при зажатой RButton) клики LButton происходят с такой же скоростью  (15ms ) как и в первом режиме, а должны быть паузы по 240ms

Не понимаю, что не так?

4

Re: AHK: Разная здержка для LButton в одном макросе

Numpad2::
NumpadDown::
   Loop, % (isEnable:=!isEnable)
      SoundBeep, 2000, 250
   KeyWait, % A_ThisHotkey
   Return

*LButton::
   while GetKeyState("LButton", "P")
   {
      if !GetKeyState("RButton", "P")
      {
          MouseClick, left,,,1,0, D
          Sleep, 15
          mouseXY(0, 5)
          MouseClick, left,,,1,0, U
          mouseXY(0, 2)
          sleep,15
      }
      else
      {  
          MouseClick, left,,,1,0, D
          Sleep, 240
          mouseXY(0, 1)
          MouseClick, left,,,1,0, U
          mouseXY(0, 1)
          sleep, 240
      }
   }
return

mouseXY(x,y)
{
DllCall("mouse_event",uint,1,int,x,int,y,uint,0,int,0)
}

5

Re: AHK: Разная здержка для LButton в одном макросе

2 Irbis:
Огромное человеческое Спасибо за помощь!

Я признатся в эту сторону решения даже не думал. Меня на Loop заклинило просто,
и я пытался этот цикл в режим 2  впихнуть всячески..

6

Re: AHK: Разная здержка для LButton в одном макросе

Пожалуйста.