1 (изменено: ypppu, 2012-12-05 11:59:22)

Тема: AHK: Макрос на Клик+смещение курсора.

Доброго времени суток.
Есть вот это:

Код:
*LButton::
    while GetKeyState("vk01", "P")
    {
        MouseClick, left,,, , 99, D
        Sleep 240
        MouseClick, left,,, , 99, U
        Sleep 240
    }
    return

Нужно, чтобы после нажатия ЛКМ происходило смещение курсора по оси У вниз на заданную величину.

У меня не получилось впихнуть сюда

MouseClickDrag, left, , , , 30 , 99, R

Прошу помочь.

2

Re: AHK: Макрос на Клик+смещение курсора.

VarSetCapacity(INPUT_, A_PtrSize=4 ? 28:40, 0)
NumPut(1, INPUT_, A_PtrSize=4 ? 16:20)
beginMove:=3, endMove:=9, valueMove:=25

LButton::
   cntOffset:=increaseOffset:=refundOffset:=0
;   Click, D
   While, GetKeyState("LButton", "P")
   {
      If % A_Index>beginMove And A_Index<endMove
      {
         refundOffset:=increaseOffset:=valueMove
         refundOffset*=cntOffset:=A_Index-beginMove
         ToolTip, % "`tBEGINMOVE"
                .   "`nindex: "A_Index
                .   "`ncount: "cntOffset
                .   "`nvalue: "refundOffset
         Sleep, 750
      }
      NumPut(increaseOffset, INPUT_, A_PtrSize=4 ? 8:12)
      DllCall("SendInput", "UInt", 1
                         , "Ptr", &INPUT_
                         , "Int", A_PtrSize=4 ? 28:40)
      If % A_Index>=endMove
      {
         increaseOffset:=0, (refundOffset:=valueMove)
         *=cntOffset:=endMove-beginMove
         ToolTip, % "ENDMOVE"          "`n"
                . "`tindex: "A_Index   "`n"
                . "`tcount: "cntOffset "`n"
                . "`tvalue: "refundOffset
         Sleep, 750
      }
      Sleep, 50
   }
;   Click, U
   ToolTip, % "count: "cntOffset "`nrefund: "
          . (refundOffset ? refundOffset:"none")
   Sleep, 750
   If refundOffset
   {
      NumPut(-refundOffset, INPUT_, A_PtrSize=4 ? 8:12)
      DllCall("SendInput", "UInt", 1
                         , "Ptr", &INPUT_
                         , "Int", A_PtrSize=4 ? 28:40)
   }
   ToolTip
   Return

Esc::ExitApp

3

Re: AHK: Макрос на Клик+смещение курсора.

Давайте не будем отклонятся от тематики форума.

4 (изменено: Scorceni, 2012-12-05 19:25:06)

Re: AHK: Макрос на Клик+смещение курсора.

Grey Спасибо что откликнулись, но в приложении почему то скрипт не работает..
То есть он работает в фоновом режиме(сзади игры), в игре при этом не работает левая кн. мыши - невозможно произвести выстрел..

Нашел на просторах вашего форума подходящее (как думается) решение:

#NoEnv
SendMode Input

_auto := true

~LButton::autofire()
MButton::_auto := ! _auto
F1::ExitApp

autofire()
{
global _auto
if _auto
{
Loop
{
if GetKeyState("LButton", "P")
{
MouseClick, left,,, 1, 0, D
Sleep, 45
if a_index < 5
mouseXY(0, 1)
MouseClick, left,,, 1, 0, U
mouseXY(0, 1)
MouseClick, left,,, 1, 0, D
Sleep, 45
if a_index < 5
mouseXY(0, 1)
MouseClick, left,,, 1, 0, U
mouseXY(0, 1)
sleep, 400
}
else
break

} ;; loop
} ;; if
} ;; autofire()


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

В таком виде не работает. Это же для CS написанно(Source engine), а в APB:Relloaded используется Unreal3.
Может в этом трабла..

Допилил руками до вот этого:

Suspend On
Numpad2::
  Suspend Toggle
    if (!A_IsSuspended)
   {
    SoundBeep 2000, 400
   }
  Else
   {
    SoundBeep, 2000, 400
    SoundBeep, 2000, 400
   }
    return            ; Этот кусок нужен что бы знать когда вкл\выкл.


#NoEnv
SendMode Input


~LButton::autofire()

autofire()

{
Loop
{
if GetKeyState("LButton", "P")
{
MouseClick, left,,, 1, 0, D
Sleep, 90
if a_index < 10
mouseXY(0, 1)
MouseClick, left,,, 1, 0, U
mouseXY(0, 1)
MouseClick, left,,, 1, 0, D
Sleep, 90
if a_index < 10
mouseXY(0, 1)
MouseClick, left,,, 1, 0, U
mouseXY(0, 1)
sleep, 120
}
else
break

} ;; loop
} ;; autofire()


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

В игре не могу проверить -серверы в дауне. Но в винде все работает вроде.При зажатии ЛКМ курсор медленно вниз смещается. Осталось отрегулировать скорость перемещения

5 (изменено: Grey, 2012-12-08 09:45:19)

Re: AHK: Макрос на Клик+смещение курсора.

Мой ответ показывал концепцию, вот так он выглядит на практике:

VarSetCapacity(INPUT_, A_PtrSize=4 ? 28:40, 0)
NumPut(1, INPUT_, A_PtrSize=4 ? 16:20)
gameMode:=1, beginMove:=3, endMove:=9, valueMove:=25

Numpad2::
NumpadDown::
   Loop, % (isEnable:=!isEnable) ? 1:2
      SoundBeep, 2000, 400
   KeyWait, % A_ThisHotkey
   Return

#If isEnable
   ~1::gameMode:=1, beginMove:=3, endMove:=9, valueMove:=25 ; primary
   ~2::gameMode:=2, beginMove:=5, endMove:=7, valueMove:=5  ; secondary
   LButton::SomeFuncName(beginMove, endMove, valueMove, gameMode)

SomeFuncName(bMove, eMove, vMove, gMode)
{
   Global INPUT_
   increaseOffset:=refundOffset:=0

   If gMode=1
      Click, D
   While, GetKeyState("LButton", "P")
   {
      If gMode=2
         Click
      If % A_Index>bMove And A_Index<eMove
         refundOffset:=increaseOffset:=vMove, refundOffset*=A_Index-bMove
      NumPut(increaseOffset, INPUT_, A_PtrSize=4 ? 8:12)
      DllCall("SendInput", "UInt", 1, "Ptr", &INPUT_, "Int", A_PtrSize=4 ? 28:40)
      If % A_Index>=eMove
         increaseOffset:=0, (refundOffset:=vMove)*=eMove-bMove
      Sleep, 50
   }
   If gMode=1
      Click, U
   If refundOffset
   {
      NumPut(-refundOffset, INPUT_, A_PtrSize=4 ? 8:12)
      DllCall("SendInput", "UInt", 1, "Ptr", &INPUT_, "Int", A_PtrSize=4 ? 28:40)
   }
}

И да!, я не учитывал в коде, что первичное оружие будет стрелять с отсечкой.

6 (изменено: Scorceni, 2012-12-09 01:15:12)

Re: AHK: Макрос на Клик+смещение курсора.

Grey

И да!, я не учитывал в коде, что первичное оружие будет стрелять с отсечкой.

Отсечка это придумка автора исходного кода, который я взял на форуме.
Мне не нужна отсечка. Это можно реализовать величиной задержки клика - ибо механику(скорострельность\пауза между выстр \отдача)  авт. оружия полностью изменить извне нереально..Она на сервере или в клиенте прописанна и завязана на анимации в т.ч.
Вторгаться в работу самого клиента мне не хочется -бан не нужен )

Мой вариант "усох" до этого:

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

Значения в  первом и втором - mouseXY(0, 0), разные спецом. Иначе, либо курсор слишком резко вниз идет, или все равно ползет вверх (хоть и медленнее,чем без скрипта).
Особенности оружия.

Ваш вариант опробую после понедельника ) в выходные дежурство (