AutoHotkey Community

It is currently May 27th, 2012, 10:11 am

All times are UTC [ DST ]




Post new topic Reply to topic  [ 83 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6
Author Message
 Post subject:
PostPosted: June 22nd, 2011, 12:17 pm 
Offline

Joined: August 26th, 2004, 3:11 pm
Posts: 80
Location: Chelsea - MA, USA
Editted the first post to link to the newest version because I apparently didn't know very old posts could be editted (last time it was editted was in 2004 - wow this much time has passed?).

The future of the script? I was thinking of making a reverse gesture script based on this script, taking diagonal movement keys out to implement like a coordinate plane swap or like a parametric function swap. So with that you would be able to "play" the function for the mouse cursor to move in strange but amazing ways...

EDIT: The following is the same code except that it only works on AHK2 (2.0-a011-177f85e):

Code:
;; Using Keyboard NumPad as a Mouse -- by deguix
; http://www.autohotkey.com
; This script makes mousing with your keyboard almost as easy
; as using a real mouse (maybe even easier for some tasks).
; It supports up to five mouse buttons and the turning of the
; mouse wheel.  It also features customizable movement speed,
; acceleration, and "axis inversion".

/*
o------------------------------------------------------------o
|Using Keyboard NumPad as a Mouse                            |
(------------------------------------------------------------)
| By deguix  / A Script file for AutoHotkey 2.0-a011-177f85e |
|           -------------------------------------------------|
|                                                            |
|    This script is an example of use of AutoHotkey. It uses |
| the remapping of NumPad keys of a keyboard to transform it |
| into a mouse. Some features are the acceleration which     |
| enables you to increase the mouse movement when holding    |
| a key for a long time, and the rotation which makes the    |
| NumPad mouse to "turn". I.e. NumPadDown as NumPadUp        |
| and vice-versa. See the list of keys used below:           |
|------------------------------------------------------------|
| Keys                  | Description                        |
|------------------------------------------------------------|
| ScrollLock (toggle on)| Activates NumPad mouse mode.       |
|-----------------------|------------------------------------|
| NumPad0               | Left mouse button click.           |
| NumPad5               | Middle mouse button click.         |
| NumPadDot             | Right mouse button click.          |
| NumPadDiv/NumPadMult  | X1/X2 mouse button click. (Win 2k+)|
| NumPadSub/NumPadAdd   | Moves up/down the mouse wheel.     |
| NumPadEnter           | Mouse movement speed modifier key. |
|-----------------------|------------------------------------|
| NumLock (toggled off) | Activates mouse movement mode.     |
|-----------------------|------------------------------------|
| NumPadEnd/Down/PgDn/  | Mouse movement.                    |
| /Left/Right/Home/Up/  |                                    |
| /PgUp                 |                                    |
| NumPadEnter           | Mouse movement speed modifier key. |
|-----------------------|------------------------------------|
| NumLock (toggled on)  | Activates mousewheel movement mode |
|-----------------------|------------------------------------|
| NumPad1-9 (except 5)  | Mouse wheel movement.*             |
| NumPadEnter           | Mouse wheel mov. speed mod. key.** |
|------------------------------------------------------------|
| NumPadEnter (pressed) | Activates mouse speed adj. mode.   |
|-----------------------|------------------------------------|
| NumPadHome/NumPadEnd/ | +/- acceleration (pixels/cycles).  |
| NumPad7/NumPad1       |                                    |
| NumPadUp/NumPadDown   | +/- initial speed (pixels).        |
| NumPad8/NumPad2       |                                    |
| NumPadPgUp/NumPadPgDn | +/- maximum speed (pixels).        |
| NumPad9/NumPad3       |                                    |
| NumPadLeft/NumPadRight| +/- clockwise rotation (45° degree)|
| NumPad4/NumPad6       |                                    |
|------------------------------------------------------------|
| * = Left/Right movements are only supported in Vista+.     |
| ** = These options are affected by the mouse wheel speed   |
| adjusted on Control Panel as well. If you don't have a     |
| mouse with wheel, the default is 3 +/- lines per option    |
| button press.                                              |
o------------------------------------------------------------o
*/

;START OF CONFIG SECTION

#SingleInstance force
#MaxHotkeysPerInterval 500

; Using the keyboard hook to implement the NumPad hotkeys prevents
; them from interfering with the generation of ANSI characters such
; as à.  This is because AutoHotkey generates such characters
; by holding down ALT and sending a series of NumPad keystrokes.
; Hook hotkeys are smart enough to ignore such keystrokes.
#UseHook

MouseSpeed:=5
MouseAccelerationSpeed:=5 ;in pixels/MouseAccelerationCycles
MouseAccelerationCycles:=50 ;interval of timer executions to increase speed by the variable above
MouseAccelerationTimerInterval:=10 ;in milliseconds (this ends up to being approximate depending on computer performance)
MouseMaxSpeed:=10
MouseRotationAngle:=0

;Mouse wheel speed is also set on Control Panel. As that
;will affect the normal mouse behavior, the real speed of
;these three below are times the normal mouse wheel speed.
MouseWheelSpeed:=2
MouseWheelAccelerationSpeed:=1 ;in pixels/MouseAccelerationCycles
MouseWheelAccelerationCycles:=50 ;interval of timer executions to increase speed by the variable above
MouseWheelAccelerationTimerInterval:=35 ;in milliseconds (this ends up to being approximate depending on computer performance)
MouseWheelMaxSpeed:=5
MouseWheelRotationAngle:=0

MouseButtonPressCheckTimerInterval:=10

;0=Pressing a button and releasing = down + up events. 1=First time pressing/releasing = down, second time = up.
MouseButtonClickLockDownState:=0
MouseButtonMovementLockDownState:=0

;END OF CONFIG SECTION

PI:= 4*ATan(1)

;This is needed or key presses would faulty send their natural
;actions. Like NumPadDiv would send sometimes "/" to the
;screen.
#InstallKeybdHook

Temp:= 0
Temp2:= 0

MouseRotationAnglePart := MouseRotationAngle
;Divide by 45° because MouseMove only supports whole numbers,
;and changing the mouse rotation to a number lesser than 45°
;could make strange movements.
;
;For example: 22.5° when pressing NumPadUp:
;  First it would move upwards until the speed
;  to the side reaches 1.
MouseRotationAnglePart /= 45
MouseWheelRotationAnglePart := MouseRotationAngle
MouseWheelRotationAnglePart /= 45

MovementVectorMagnitude:=0
MovementVectorDirection:=0
MovementVectors:=0
MovementVectorDefaultMagnitude:=MouseSpeed
MovementVectorDirectionTemp:=0

MovementWheelVectorMagnitude:=0
MovementWheelVectorDirection:=0
MovementWheelVectors:=0
MovementWheelVectorDefaultMagnitude:=MouseWheelSpeed

Buttons:=0

SetKeyDelay, -1
SetMouseDelay, -1

Hotkey, *NumPad0, ButtonLeftClick
Hotkey, *NumPadIns, ButtonLeftClickIns
Hotkey, *NumPad5, ButtonMiddleClick
Hotkey, *NumPadClear, ButtonMiddleClickClear
Hotkey, *NumPadDot, ButtonRightClick
Hotkey, *NumPadDel, ButtonRightClickDel
Hotkey, *NumPadDiv, ButtonX1Click
Hotkey, *NumPadMult, ButtonX2Click

Hotkey, *NumPadSub, ButtonWheelUp
Hotkey, *NumPadAdd, ButtonWheelDown

Hotkey, *NumPadRight, ButtonRight
Hotkey, *NumPadPgUp, ButtonUpRight
Hotkey, *NumPadUp, ButtonUp
Hotkey, *NumPadHome, ButtonUpLeft
Hotkey, *NumPadLeft, ButtonLeft
Hotkey, *NumPadEnd, ButtonDownLeft
Hotkey, *NumPadDown, ButtonDown
Hotkey, *NumPadPgDn, ButtonDownRight

Hotkey, *NumPad6, ButtonWheelRight
Hotkey, *NumPad9, ButtonWheelUpRight
Hotkey, *NumPad8, ButtonWheelUp
Hotkey, *NumPad7, ButtonWheelUpLeft
Hotkey, *NumPad4, ButtonWheelLeft
Hotkey, *NumPad1, ButtonWheelDownLeft
Hotkey, *NumPad2, ButtonWheelDown
Hotkey, *NumPad3, ButtonWheelDownRight

Hotkey, NumPadEnter & NumPadUp, ButtonSpeedUp
Hotkey, NumPadEnter & NumPadDown, ButtonSpeedDown
Hotkey, NumPadEnter & NumPadHome, ButtonAccelerationSpeedUp
Hotkey, NumPadEnter & NumPadEnd, ButtonAccelerationSpeedDown
Hotkey, NumPadEnter & NumPadPgUp, ButtonMaxSpeedUp
Hotkey, NumPadEnter & NumPadPgDn, ButtonMaxSpeedDown
Hotkey, NumPadEnter & NumPadLeft, ButtonRotationAngleUp
Hotkey, NumPadEnter & NumPadRight, ButtonRotationAngleDown

Hotkey, NumPadEnter & NumPad8, ButtonWheelSpeedUp
Hotkey, NumPadEnter & NumPad2, ButtonWheelSpeedDown
Hotkey, NumPadEnter & NumPad7, ButtonWheelAccelerationSpeedUp
Hotkey, NumPadEnter & NumPad1, ButtonWheelAccelerationSpeedDown
Hotkey, NumPadEnter & NumPad9, ButtonWheelMaxSpeedUp
Hotkey, NumPadEnter & NumPad3, ButtonWheelMaxSpeedDown
Hotkey, NumPadEnter & NumPad4, ButtonWheelRotationAngleUp
Hotkey, NumPadEnter & NumPad6, ButtonWheelRotationAngleDown

Hotkey, NumPadEnter, ButtonEnter

Gosub, ~ScrollLock  ; Initialize based on current ScrollLock state.
return

;Key activation support

~ScrollLock::
; Wait for it to be released because otherwise the hook state gets reset
; while the key is down, which causes the up-event to get suppressed,
; which in turn prevents toggling of the ScrollLock state/light:
KeyWait, ScrollLock
GetKeyState, ScrollLockState, ScrollLock, T
If (ScrollLockState = 1)
{
  Hotkey, *NumPad0, on
  Hotkey, *NumPadIns, on
  Hotkey, *NumPad5, on
  Hotkey, *NumPadDot, on
  Hotkey, *NumPadDel, on
  Hotkey, *NumPadDiv, on
  Hotkey, *NumPadMult, on

  Hotkey, *NumPadSub, on
  Hotkey, *NumPadAdd, on

  Hotkey, *NumPadUp, on
  Hotkey, *NumPadDown, on
  Hotkey, *NumPadLeft, on
  Hotkey, *NumPadRight, on
  Hotkey, *NumPadHome, on
  Hotkey, *NumPadEnd, on
  Hotkey, *NumPadPgUp, on
  Hotkey, *NumPadPgDn, on

  Hotkey, *NumPad6, on
  Hotkey, *NumPad9, on
  Hotkey, *NumPad8, on
  Hotkey, *NumPad7, on
  Hotkey, *NumPad4, on
  Hotkey, *NumPad1, on
  Hotkey, *NumPad2, on
  Hotkey, *NumPad3, on

  Hotkey, NumPadEnter & NumPadUp, on
  Hotkey, NumPadEnter & NumPadDown, on
  Hotkey, NumPadEnter & NumPadHome, on
  Hotkey, NumPadEnter & NumPadEnd, on
  Hotkey, NumPadEnter & NumPadPgUp, on
  Hotkey, NumPadEnter & NumPadPgDn, on
  Hotkey, NumPadEnter & NumPadLeft, on
  Hotkey, NumPadEnter & NumPadRight, on

  Hotkey, NumPadEnter & NumPad8, on
  Hotkey, NumPadEnter & NumPad2, on
  Hotkey, NumPadEnter & NumPad7, on
  Hotkey, NumPadEnter & NumPad1, on
  Hotkey, NumPadEnter & NumPad9, on
  Hotkey, NumPadEnter & NumPad3, on
 
  Hotkey, NumPadEnter, on
}
else
{
  Hotkey, *NumPad0, off
  Hotkey, *NumPadIns, off
  Hotkey, *NumPad5, off
  Hotkey, *NumPadDot, off
  Hotkey, *NumPadDel, off
  Hotkey, *NumPadDiv, off
  Hotkey, *NumPadMult, off

  Hotkey, *NumPadSub, off
  Hotkey, *NumPadAdd, off

  Hotkey, *NumPadUp, off
  Hotkey, *NumPadDown, off
  Hotkey, *NumPadLeft, off
  Hotkey, *NumPadRight, off
  Hotkey, *NumPadHome, off
  Hotkey, *NumPadEnd, off
  Hotkey, *NumPadPgUp, off
  Hotkey, *NumPadPgDn, off

  Hotkey, *NumPad6, off
  Hotkey, *NumPad9, off
  Hotkey, *NumPad8, off
  Hotkey, *NumPad7, off
  Hotkey, *NumPad4, off
  Hotkey, *NumPad1, off
  Hotkey, *NumPad2, off
  Hotkey, *NumPad3, off

  Hotkey, NumPadEnter & NumPadUp, off
  Hotkey, NumPadEnter & NumPadDown, off
  Hotkey, NumPadEnter & NumPadHome, off
  Hotkey, NumPadEnter & NumPadEnd, off
  Hotkey, NumPadEnter & NumPadPgUp, off
  Hotkey, NumPadEnter & NumPadPgDn, off
  Hotkey, NumPadEnter & NumPadLeft, off
  Hotkey, NumPadEnter & NumPadRight, off

  Hotkey, NumPadEnter & NumPad8, off
  Hotkey, NumPadEnter & NumPad2, off
  Hotkey, NumPadEnter & NumPad7, off
  Hotkey, NumPadEnter & NumPad1, off
  Hotkey, NumPadEnter & NumPad9, off
  Hotkey, NumPadEnter & NumPad3, off
 
  Hotkey, NumPadEnter, off
}
return

ButtonEnter:
Send, {NumPadEnter}
Return

;Mouse click support
ButtonLeftClick:
ButtonLeftClickIns:
ButtonClickType:="Left"
MouseButtonName:="LButton"
Goto ButtonClickStart
ButtonMiddleClick:
ButtonMiddleClickClear:
ButtonClickType:="Middle"
MouseButtonName:="MButton"
Goto ButtonClickStart
ButtonRightClick:
ButtonRightClickDel:
ButtonClickType:="Right"
MouseButtonName:="RButton"
Goto ButtonClickStart
ButtonX1Click:
ButtonClickType:="X1"
MouseButtonName:="XButton1"
Goto ButtonClickStart
ButtonX2Click:
ButtonClickType:="X2"
MouseButtonName:="XButton2"
ButtonClickStart:
StrReplace, ButtonName, A_ThisHotkey, *
If (ButtonDown_%ButtonName%!=1)
{
  ButtonDown_%ButtonName%:=1
  Buttons:=Buttons+1
  Button%Buttons%Name:=ButtonName
  Button%Buttons%ClickType:=ButtonClickType
  Button%Buttons%MouseButtonName:=MouseButtonName
  Button%Buttons%Initialized:=0
  Button%Buttons%UnHoldStep:=0
  If (Buttons = 1)
    SetTimer, MouseButtonPressCheck, % MouseButtonPressCheckTimerInterval
}
Return

MouseButtonPressCheck:
If (Buttons=0)
{
  SetTimer, MouseButtonPressCheck, off
  Return
}

Button:=0
Loop
{
  Button:=Button+1
  If (Button%Buttons%Initialized=0)
  {
    GetKeyState, MouseButtonState, % Button%Button%MouseButtonName
    If (MouseButtonState=0)
      Continue
    MouseClick, % Button%Button%ClickType,,, 1, 0, D
    Button%Buttons%Initialized:=1
  }
 
  GetKeyState, ButtonState, % Button%Button%Name, P
  If (ButtonState=0 and (MouseButtonClickLockDownState=0 or (MouseButtonClickLockDownState=1 and Button%Buttons%UnHoldStep=2)))
  {
    ButtonName:=Button%Buttons%Name
    ButtonDown_%ButtonName%:=0
    MouseClick, % Button%Button%ClickType,,, 1, 0, U
   
    ButtonTemp:=Button
    ButtonTempPrev:=ButtonTemp-1

    Loop
    {
      ButtonTemp:=ButtonTemp+1
      ButtonTempPrev:=ButtonTempPrev+1
     
      If (Buttons<ButtonTemp)
      {
        Button%ButtonTempPrev%Name:=""
        Button%ButtonTempPrev%ClickType:=""
        Button%ButtonTempPrev%MouseButtonName:=""
        Button%ButtonTempPrev%Initialized:=0
        Break
      }
      Button%ButtonTempPrev%Name:=Button%ButtonTemp%Name
      Button%ButtonTempPrev%ClickType:=Button%ButtonTemp%ClickType
      Button%ButtonTempPrev%MouseButtonName:=Button%ButtonTemp%MouseButtonName
      Button%ButtonTempPrev%Initialized:=Button%ButtonTemp%Initialized
    }
    Buttons:=Buttons-1
  }
 
  If(ButtonState=0 and MouseButtonClickLockDownState=1 and Button%Buttons%UnHoldStep=0)
    Button%Buttons%UnHoldStep:=1
  If(ButtonState=1 and MouseButtonClickLockDownState=1 and Button%Buttons%UnHoldStep=1)
    Button%Buttons%UnHoldStep:=2
 
  If (Buttons<=Button)
    Break
}
Return

;Mouse movement support
ButtonDownRight:
MovementVectorDirectionTemp+=1
ButtonDown:
MovementVectorDirectionTemp+=1
ButtonDownLeft:
MovementVectorDirectionTemp+=1
ButtonLeft:
MovementVectorDirectionTemp+=1
ButtonUpLeft:
MovementVectorDirectionTemp+=1
ButtonUp:
MovementVectorDirectionTemp+=1
ButtonUpRight:
MovementVectorDirectionTemp+=1
ButtonRight:
StrReplace, MovementButtonName, A_ThisHotkey, *
If (MovementButtonDown_%MovementButtonName%!=1)
{
  MovementButtonDown_%MovementButtonName%:=1
  MovementVectors:=MovementVectors+1
  MovementVector%MovementVectors%Name:=MovementButtonName
  MovementVector%MovementVectors%Direction:=(MovementVectorDirectionTemp*PI/4)+(MouseRotationAngle*PI/180)
  MovementVector%MovementVectors%Magnitude:=MouseSpeed
  MovementVector%MovementVectors%Initialized:=0
  MovementVector%MovementVectors%UnHoldStep:=0
  If (MovementVectors = 1)
  {
    MouseCurrentAccelerationSpeed:=MouseSpeed
    SetTimer, MovementVectorAcceleration, % MouseAccelerationTimerInterval
  }
}
MovementVectorDirectionTemp:=0
Return

MovementVectorAddition:
;Add 2 vectors
MovementVectorX:=MovementVectorMagnitude*Cos(MovementVectorDirection)+MovementVector%MovementVector%Magnitude*Cos(MovementVector%MovementVector%Direction)
MovementVectorY:=MovementVectorMagnitude*Sin(MovementVectorDirection)+MovementVector%MovementVector%Magnitude*Sin(MovementVector%MovementVector%Direction)
MovementVectorMagnitude:=Sqrt(MovementVectorX**2+MovementVectorY**2)
MovementVectorDirection:=ATan(MovementVectorY/MovementVectorX)
If (MovementVectorX<0)
{
  If (MovementVectorY>0)
    MovementVectorDirection:=MovementVectorDirection-PI
  Else
    MovementVectorDirection:=PI+MovementVectorDirection
}
MovementVectorMagnitudeRatio:=MovementVectorMagnitude/MouseSpeed
Return

MovementVectorAcceleration:
If (MovementVectors=0)
{
  MovementVectorX:=0.000000
  MovementVectorY:=0.000000
  MovementVectorMagnitude:=0.000000
  MovementVectorDirection:=0.000000
  MovementVectorMagnitudeRatio:=0.000000
  MovementResultantVectorMagnitude:=0.000000
  MovementResultantVectorDirection:=0.000000
  MovementResultantVectorX:=0.000000
  MovementResultantVectorY:=0.000000
  ;TrayTip,,% "(" . MovementResultantVectorMagnitude . "," . MovementResultantVectorDirection . ") - <" . MovementResultantVectorX . "," . MovementResultantVectorY . ">"
  SetTimer, MovementVectorAcceleration, off
  Return
}
MovementVector:=0
Loop
{
  MovementVector:=MovementVector+1
  If (MovementVector%MovementVector%Initialized=0)
  {
    Gosub, MovementVectorAddition
    MovementVector%MovementVector%Initialized:=1
  }
  GetKeyState, MovementButtonState, % MovementVector%MovementVector%Name, P
  If (MovementButtonState=0 and (MouseButtonMovementLockDownState=0 or (MouseButtonMovementLockDownState=1 and MovementVector%MovementVector%UnHoldStep=2)))
  {
    MovementButtonName:=MovementVector%MovementVector%Name
    MovementButtonDown_%MovementButtonName%:=0
    MovementVector%MovementVector%Magnitude:=-MovementVector%MovementVector%Magnitude
    Gosub, MovementVectorAddition
    MovementVectorTemp:=MovementVector
    MovementVectorTempPrev:=MovementVector-1
    Loop
    {
      MovementVectorTemp:=MovementVectorTemp+1
      MovementVectorTempPrev:=MovementVectorTempPrev+1
      If (MovementVectors<MovementVectorTemp)
      {
        MovementVector%MovementVectorTempPrev%Name:=""
        MovementVector%MovementVectorTempPrev%Direction:=0
        MovementVector%MovementVectorTempPrev%Magnitude:=0
        MovementVector%MovementVectorTempPrev%Initialized:=0
        MovementVector%MovementVectorTempPrev%UnHoldStep:=0
        Break
      }
      MovementVector%MovementVectorTempPrev%Name:=MovementVector%MovementVectorTemp%Name
      MovementVector%MovementVectorTempPrev%Direction:=MovementVector%MovementVectorTemp%Direction
      MovementVector%MovementVectorTempPrev%Magnitude:=MovementVector%MovementVectorTemp%Magnitude
      MovementVector%MovementVectorTempPrev%Initialized:=MovementVector%MovementVectorTemp%Initialized
      MovementVector%MovementVectorTempPrev%UnHoldStep:=MovementVector%MovementVectorTemp%UnHoldStep
    }
    MovementVectors:=MovementVectors-1
  }
 
  If(MovementButtonState=0 and MouseButtonMovementLockDownState=1 and MovementVector%MovementVector%UnHoldStep=0)
    MovementVector%MovementVector%UnHoldStep:=1
  If(MovementButtonState=1 and MouseButtonMovementLockDownState=1 and MovementVector%MovementVector%UnHoldStep=1)
    MovementVector%MovementVector%UnHoldStep:=2
 
  If (MovementVectors<=MovementVector)
    Break
}
If (MouseCurrentAccelerationSpeed<MouseMaxSpeed)
  MouseCurrentAccelerationSpeed:=MouseCurrentAccelerationSpeed+(MouseAccelerationSpeed/MouseAccelerationCycles)
MovementResultantVectorMagnitude:=MouseCurrentAccelerationSpeed*MovementVectorMagnitudeRatio
MovementResultantVectorDirection:=MovementVectorDirection
MovementResultantVectorX:=MovementResultantVectorMagnitude*Cos(MovementResultantVectorDirection)
MovementResultantVectorY:=MovementResultantVectorMagnitude*Sin(MovementResultantVectorDirection)
;TrayTip,,% "(" . MovementResultantVectorMagnitude . "," . MovementResultantVectorDirection . ") - <" . MovementResultantVectorX . "," . MovementResultantVectorY . ">"
MouseMove, % MovementResultantVectorX, % -MovementResultantVectorY, 0, R
Return

;Mouse wheel movement support
ButtonWheelDownRight:
MovementWheelVectorDirectionTemp+=1
ButtonWheelDown:
MovementWheelVectorDirectionTemp+=1
ButtonWheelDownLeft:
MovementWheelVectorDirectionTemp+=1
ButtonWheelLeft:
MovementWheelVectorDirectionTemp+=1
ButtonWheelUpLeft:
MovementWheelVectorDirectionTemp+=1
ButtonWheelUp:
MovementWheelVectorDirectionTemp+=1
ButtonWheelUpRight:
MovementWheelVectorDirectionTemp+=1
ButtonWheelRight:
StrReplace, MovementWheelButtonName, A_ThisHotkey, *
If (MovementWheelButtonDown_%MovementWheelButtonName%!=1)
{
  MovementWheelButtonDown_%MovementWheelButtonName%:=1
  MovementWheelVectors:=MovementWheelVectors+1
  MovementWheelVector%MovementWheelVectors%Name:=MovementWheelButtonName
  MovementWheelVector%MovementWheelVectors%Direction:=(MovementWheelVectorDirectionTemp*PI/4)+(MouseWheelRotationAngle*PI/180)
  MovementWheelVector%MovementWheelVectors%Magnitude:=MouseWheelSpeed
  MovementWheelVector%MovementWheelVectors%Initialized:=0
  MovementWheelVector%MovementWheelVectors%UnHoldStep:=0
 
  If (MovementWheelVectors = 1)
  {
    MouseWheelCurrentAccelerationSpeed:=MouseWheelSpeed
    SetTimer, MovementWheelVectorAcceleration, % MouseWheelAccelerationTimerInterval
  }
}
MovementWheelVectorDirectionTemp:=0
Return

MovementWheelVectorAddition:
;Add 2 vectors
MovementWheelVectorX:=MovementWheelVectorMagnitude*Cos(MovementWheelVectorDirection)+MovementWheelVector%MovementWheelVector%Magnitude*Cos(MovementWheelVector%MovementWheelVector%Direction)
MovementWheelVectorY:=MovementWheelVectorMagnitude*Sin(MovementWheelVectorDirection)+MovementWheelVector%MovementWheelVector%Magnitude*Sin(MovementWheelVector%MovementWheelVector%Direction)
MovementWheelVectorMagnitude:=Sqrt(MovementWheelVectorX**2+MovementWheelVectorY**2)
MovementWheelVectorDirection:=ATan(MovementWheelVectorY/MovementWheelVectorX)
If (MovementWheelVectorX<0)
{
  If (MovementWheelVectorY>0)
    MovementWheelVectorDirection:=MovementWheelVectorDirection-PI
  Else
    MovementWheelVectorDirection:=PI+MovementWheelVectorDirection
}
MovementWheelVectorMagnitudeRatio:=MovementWheelVectorMagnitude/MouseWheelSpeed
Return

MovementWheelVectorAcceleration:
If (MovementWheelVectors=0)
{
  MovementWheelVectorX:=0.000000
  MovementWheelVectorY:=0.000000
  MovementWheelVectorMagnitude:=0.000000
  MovementWheelVectorDirection:=0.000000
  MovementWheelVectorMagnitudeRatio:=0.000000

  MovementWheelResultantVectorMagnitude:=0.000000
  MovementWheelResultantVectorDirection:=0.000000
  MovementWheelResultantVectorX:=0.000000
  MovementWheelResultantVectorY:=0.000000
 
  ;TrayTip,,% "(" . MovementResultantVectorMagnitude . "," . MovementResultantVectorDirection . ") - <" . MovementResultantVectorX . "," . MovementResultantVectorY . ">"
  SetTimer, MovementWheelVectorAcceleration, off
  Return
}

MovementWheelVector:=0
Loop
{
  MovementWheelVector:=MovementWheelVector+1
  If (MovementWheelVector%MovementWheelVector%Initialized=0)
  {
    Gosub, MovementWheelVectorAddition
    MovementWheelVector%MovementWheelVector%Initialized:=1
  }
 
  GetKeyState, MovementWheelButtonState, % MovementWheelVector%MovementWheelVector%Name, P
  If (MovementWheelButtonState=0 and (MouseButtonMovementLockDownState=0 or (MouseButtonMovementLockDownState=1 and MovementWheelVector%MovementWheelVector%UnHoldStep=2)))
  {
    MovementWheelButtonName:=MovementWheelVector%MovementWheelVector%Name
    MovementWheelButtonDown_%MovementWheelButtonName%:=0
    MovementWheelVector%MovementWheelVector%Magnitude:=-MovementWheelVector%MovementWheelVector%Magnitude
    Gosub, MovementWheelVectorAddition
   
    MovementWheelVectorTemp:=MovementWheelVector
    MovementWheelVectorTempPrev:=MovementWheelVector-1
    Loop
    {
      MovementWheelVectorTemp:=MovementWheelVectorTemp+1
      MovementWheelVectorTempPrev:=MovementWheelVectorTempPrev+1
     
      If (MovementWheelVectors<MovementWheelVectorTemp)
      {
        MovementWheelVector%MovementWheelVectorTempPrev%Name:=""
        MovementWheelVector%MovementWheelVectorTempPrev%Direction:=0
        MovementWheelVector%MovementWheelVectorTempPrev%Magnitude:=0
        MovementWheelVector%MovementWheelVectorTempPrev%Initialized:=0
        MovementWheelVector%MovementWheelVectorTempPrev%UnHoldStep:=0
        Break
      }
     
      MovementWheelVector%MovementWheelVectorTempPrev%Name:=MovementWheelVector%MovementWheelVectorTemp%Name
      MovementWheelVector%MovementWheelVectorTempPrev%Direction:=MovementWheelVector%MovementWheelVectorTemp%Direction
      MovementWheelVector%MovementWheelVectorTempPrev%Magnitude:=MovementWheelVector%MovementWheelVectorTemp%Magnitude
      MovementWheelVector%MovementWheelVectorTempPrev%Initialized:=MovementWheelVector%MovementWheelVectorTemp%Initialized
      MovementWheelVector%MovementWheelVectorTempPrev%UnHoldStep:=MovementWheelVector%MovementWheelVectorTemp%UnHoldStep
    }
    MovementWheelVectors:=MovementWheelVectors-1
  }
  If(MovementWheelButtonState=0 and MouseButtonMovementLockDownState=1 and MovementWheelVector%MovementWheelVector%UnHoldStep=0)
    MovementWheelVector%MovementWheelVector%UnHoldStep:=1
  If(MovementWheelButtonState=1 and MouseButtonMovementLockDownState=1 and MovementWheelVector%MovementWheelVector%UnHoldStep=1)
    MovementWheelVector%MovementWheelVector%UnHoldStep:=2

  If (MovementWheelVectors<=MovementWheelVector)
    Break
}

If (MouseWheelCurrentAccelerationSpeed<MouseWheelMaxSpeed)
  MouseWheelCurrentAccelerationSpeed:=MouseWheelCurrentAccelerationSpeed+(MouseWheelAccelerationSpeed/MouseWheelAccelerationCycles)

MovementWheelResultantVectorMagnitude:=MouseWheelCurrentAccelerationSpeed*MovementWheelVectorMagnitudeRatio
MovementWheelResultantVectorDirection:=MovementWheelVectorDirection
MovementWheelResultantVectorX:=MovementWheelResultantVectorMagnitude*Cos(MovementWheelResultantVectorDirection)
MovementWheelResultantVectorY:=MovementWheelResultantVectorMagnitude*Sin(MovementWheelResultantVectorDirection)
;TrayTip,,% "(" . MovementResultantVectorMagnitude . "," . MovementResultantVectorDirection . ") - <" . MovementResultantVectorX . "," . MovementResultantVectorY . ">"

If (MovementWheelResultantVectorX>=0)
  MouseClick, wheelright,,, % MovementWheelResultantVectorX, 0, D
Else
  MouseClick, wheelleft,,, % -MovementWheelResultantVectorX, 0, D

If (MovementWheelResultantVectorY>=0)
  MouseClick, wheelup,,, % MovementWheelResultantVectorY, 0, D
Else
  MouseClick, wheeldown,,, % -MovementWheelResultantVectorY, 0, D
Return


;Speed/rotation configuration support
;Movement
ButtonSpeedUp:
MouseSpeed:=MouseSpeed+2
ButtonSpeedDown:
MouseSpeed--
If (MouseSpeed>MouseMaxSpeed)
  MouseSpeed:=MouseMaxSpeed
If (MouseSpeed<=1)
{
  MouseSpeed:=1
  ToolTip, Mouse speed: %MouseSpeed% pixel
}
Else
  ToolTip, Mouse speed: %MouseSpeed% pixels
SetTimer, RemoveToolTip, 1000
Return

ButtonAccelerationSpeedUp:
MouseAccelerationSpeed:=MouseAccelerationSpeed+2
ButtonAccelerationSpeedDown:
MouseAccelerationSpeed--
If (MouseAccelerationSpeed<=1)
{
  MouseAccelerationSpeed:=1
  ToolTip, Mouse acceleration speed: %MouseAccelerationSpeed% pixel/cycle
}
Else
  ToolTip, Mouse acceleration speed: %MouseAccelerationSpeed% pixels/cycle
SetTimer, RemoveToolTip, 1000
Return

ButtonMaxSpeedUp:
MouseMaxSpeed:=MouseMaxSpeed+2
ButtonMaxSpeedDown:
MouseMaxSpeed--
If (MouseSpeed>MouseMaxSpeed)
  MouseSpeed:=MouseMaxSpeed
If (MouseMaxSpeed<=1)
{
  MouseMaxSpeed:=1
  ToolTip, Mouse maximum speed: %MouseMaxSpeed% pixel
}
Else
  ToolTip, Mouse maximum speed: %MouseMaxSpeed% pixels
SetTimer, RemoveToolTip, 1000
Return

ButtonRotationAngleUp:
MouseRotationAnglePart:=MouseRotationAnglePart+2
ButtonRotationAngleDown:
MouseRotationAnglePart--
If(MouseRotationAnglePart>=8)
  MouseRotationAnglePart:=0
If(MouseRotationAnglePart<0)
  MouseRotationAnglePart:=7
MouseRotationAngle := MouseRotationAnglePart
MouseRotationAngle *= 45
ToolTip, Mouse rotation angle: %MouseRotationAngle% degrees
SetTimer, RemoveToolTip, 1000
Return

;Wheel
ButtonWheelSpeedUp:
MouseWheelSpeed:=MouseWheelSpeed+2
ButtonWheelSpeedDown:
MouseWheelSpeed--
If (MouseWheelSpeed>MouseWheelMaxSpeed)
  MouseWheelSpeed:=MouseWheelMaxSpeed
If (MouseWheelSpeed<=1)
  MouseWheelSpeed:=1
RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
MouseWheelSpeedTemp:=MouseWheelSpeed*MouseWheelSpeedMultiplier
If (MouseWheelSpeedTemp=1)
  ToolTip, Mouse wheel speed: %MouseWheelSpeedTemp% line
Else
  ToolTip, Mouse wheel speed: %MouseWheelSpeedTemp% lines
SetTimer, RemoveToolTip, 1000
Return

ButtonWheelAccelerationSpeedUp:
MouseWheelAccelerationSpeed:=MouseWheelAccelerationSpeed+2
ButtonWheelAccelerationSpeedDown:
MouseWheelAccelerationSpeed--
If (MouseWheelAccelerationSpeed<=1)
  MouseWheelAccelerationSpeed:=1
RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
MouseWheelAccelerationSpeedTemp:=MouseWheelAccelerationSpeed*MouseWheelSpeedMultiplier
If (MouseWheelAccelerationSpeedTemp=1)
  ToolTip, Mouse wheel acceleration speed: %MouseWheelAccelerationSpeedTemp% line/cycle
Else
  ToolTip, Mouse wheel acceleration speed: %MouseWheelAccelerationSpeedTemp% lines/cycle
SetTimer, RemoveToolTip, 1000
Return

ButtonWheelMaxSpeedUp:
MouseWheelMaxSpeed:=MouseWheelMaxSpeed+2
ButtonWheelMaxSpeedDown:
MouseWheelMaxSpeed--
If (MouseWheelSpeed>MouseWheelMaxSpeed)
  MouseWheelSpeed:=MouseWheelMaxSpeed
If (MouseWheelMaxSpeed<=1)
  MouseWheelMaxSpeed:=1
RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
MouseWheelMaxSpeedTemp:=MouseWheelMaxSpeed*MouseWheelSpeedMultiplier
If (MouseWheelMaxSpeedTemp=1)
  ToolTip, Mouse wheel max speed: %MouseWheelMaxSpeedTemp% line
Else
  ToolTip, Mouse wheel max speed: %MouseWheelMaxSpeedTemp% lines
SetTimer, RemoveToolTip, 1000
Return

ButtonWheelRotationAngleUp:
MouseWheelRotationAnglePart:=MouseWheelRotationAnglePart+2
ButtonWheelRotationAngleDown:
MouseWheelRotationAnglePart--
If(MouseWheelRotationAnglePart>=8)
  MouseWheelRotationAnglePart:=0
If(MouseWheelRotationAnglePart<0)
  MouseWheelRotationAnglePart:=7
MouseWheelRotationAngle := %MouseWheelRotationAnglePart%
MouseWheelRotationAngle *= 45
ToolTip, Mouse wheel rotation angle: %MouseWheelRotationAngle% degrees
SetTimer, RemoveToolTip, 1000
Return

RemoveToolTip:
SetTimer, RemoveToolTip, Off
ToolTip
Return
My opinions on the alpha? Syntax is a bit more unified. Just gotta get used to GetKeyState returning a number value instead of "U" and "D"...

_________________
Working now on:
NumpadMouse v2 (Draw)
top-recode project (private server script) (pkodev)


Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: February 5th, 2012, 10:34 pm 
Offline

Joined: February 5th, 2012, 8:54 pm
Posts: 7
Hi and thanks for the great script...

Is it possible to lower the initial (i.e. before accelaration) mouse speed even more than the one I get with MouseSpeed:=1 ??

I tried to lower the key repetition seting in windows but it didn't help.

I am trying to help a person with special needs to control the mouse with a joystick using this script, but currently it's too fast for her.

Thanks a lot


Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: February 11th, 2012, 6:21 pm 
Offline

Joined: August 26th, 2004, 3:11 pm
Posts: 80
Location: Chelsea - MA, USA
If I remember right, MouseAccelerationTimerInterval actually adjusts the amount of time per acceleration interval, which would actually determine the normal movement speed (what MouseSpeed of 1 means, in milliseconds - right now it's 10 milliseconds). Try putting a higher value here, and see if it goes slower.

_________________
Working now on:
NumpadMouse v2 (Draw)
top-recode project (private server script) (pkodev)


Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: February 11th, 2012, 6:45 pm 
Offline

Joined: February 5th, 2012, 8:54 pm
Posts: 7
Hi and thanks for the reply,

I was actually using a much older version of the script (the one given in script showcase http://www.autohotkey.com/docs/scripts/NumpadMouse.htm) when I asked that.

In the latest script given here I can adjust the speed by changing the variables: MouseSpeed, MouseAccelerationSpeed, MouseAccelerationCycles, MouseAccelerationTimerInterval, and MouseMaxSpeed

I haven't understand exactly how each of these affects the speed but with several trials I fount a set that is good enough for me.

Thanks a lot...


Report this post
Top
 Profile  
Reply with quote  
 Post subject: vimouse
PostPosted: March 19th, 2012, 5:46 pm 
I modified numpadmouse to be able to use it using vi keys. For those who use vi or vim and like these key bindings.

Usage:

ctrl-; : Mouse activate/desactivate
h/j/k/l : left/down/up/right (may be preceded by a numeric percentage prefix)
u/n/o/. : left up/left down/right up/right down (diagonal movements, may be preceded by a numeric percentage prefix)
Any number : Percentage prefix (how many percent of the screen to move the cursor, followed by movement keys h/j/k/l)
q/w/e/r/t/a/g/z/x/c/v/b : Percentage prefix presets (press them to see their values, followed by movement keys h/j/k/l)
s/p : middle click
s/[ : right click
i/m : mouse wheel up/down
f1/f2 : mouse cursor speed down/up
f3/f4 : mouse cursor acceleration speed /down/up
f5/f6 : mouse cursor max speed down/up
f7/f8 : mouse wheel speed down/up
f9/f10 : mouse wheel acceleration down/up
f11/f12 : mouse wheel max speed down/up
-/=, + : speed increment (from how much to increment the speed up or down)
win+(h/j/k/l) : left/down/up/right arrow


Code:
;commenter le code de rotation et voir l'impact, je devrais pas avoir ce code dans le script

;utiliser le bouton du milieu de la souris dans firefox et visual studio et possiblement d'autres apps

;utiliser aussi les diagonales ca sauve des touches

usage =
(
    usage:
    ctrl-; : Mouse activate/desactivate
    h/j/k/l : left/down/up/right (may be preceded by a numeric percentage prefix)
    u/n/o/. : left up/left down/right up/right down (diagonal movements, may be preceded by a numeric percentage prefix)
    Any number : Percentage prefix (how many percent of the screen to move the cursor, followed by movement keys h/j/k/l)
    q/w/e/r/t/a/g/z/x/c/v/b : Percentage prefix presets (press them to see their values, followed by movement keys h/j/k/l)
    s/p : middle click
    s/[ : right click
    i/m : mouse wheel up/down
    f1/f2 : mouse cursor speed down/up
    f3/f4 : mouse cursor acceleration speed /down/up
    f5/f6 : mouse cursor max speed down/up
    f7/f8 : mouse wheel speed down/up
    f9/f10 : mouse wheel acceleration down/up
    f11/f12 : mouse wheel max speed down/up
    -/=, + : speed increment (from how much to increment the speed up or down)
    win+(h/j/k/l) : left/down/up/right arrow
)
msgbox ,, vimouse, %usage%

;START OF CONFIG SECTION

#SingleInstance force

; De combien de pixel le curseur se deplace
MouseSpeed = 1
; La vitesse a laquelle le pointeur atteint sa vitesse maximal
MouseAccelerationSpeed = 600
; La vitesse maximal que la souris ira une fois acceleree
MouseMaxSpeed = 600
; Facteur d'incrementation de vitesse
SpeedIncrement = 10

MouseActivated = false
NumPrefix := ""

;Mouse wheel speed is also set on Control Panel. As that
;will affect the normal mouse behavior, the real speed of
;these three below are times the normal mouse wheel speed.
MouseWheelSpeed = 1
MouseWheelAccelerationSpeed = 1
MouseWheelMaxSpeed = 1

MouseRotationAngle = 0

;END OF CONFIG SECTION

;This is needed or key presses would faulty send their natural
;actions. Like NumPadDiv would send sometimes "/" to the
;screen.       
#InstallKeybdHook

Temp = 0
Temp2 = 0

MouseCurrentAccelerationSpeed = 0
MouseCurrentSpeed = %MouseSpeed%

MouseWheelCurrentAccelerationSpeed = 0
MouseWheelCurrentSpeed = %MouseSpeed%

SetKeyDelay, -1
SetMouseDelay, -1

Hotkey, *f, ButtonLeftClick
Hotkey, *space, ButtonLeftClick
Hotkey, *d, ButtonMiddleClick
Hotkey, *p, ButtonMiddleClick
Hotkey, *s, ButtonRightClick
Hotkey, *[, ButtonRightClick

Hotkey, *i, ButtonWheelUp
Hotkey, *m, ButtonWheelDown

Hotkey, 0, Num0
Hotkey, 1, Num1
Hotkey, 2, Num2
Hotkey, 3, Num3
Hotkey, 4, Num4
Hotkey, 5, Num5
Hotkey, 6, Num6
Hotkey, 7, Num7
Hotkey, 8, Num8
Hotkey, 9, Num9

Hotkey, q, Num1
Hotkey, w, Num3
Hotkey, e, Num6
Hotkey, r, Num12
Hotkey, t, Num25

Hotkey, a, Num50
Hotkey, g, Num75

Hotkey, z, Num100
Hotkey, x, Num125
Hotkey, c, Num150
Hotkey, v, Num175
Hotkey, b, Num200

Hotkey, k, ButtonUp
Hotkey, j, ButtonDown
Hotkey, h, ButtonLeft
Hotkey, l, ButtonRight
Hotkey, u, ButtonUpLeft
Hotkey, o, ButtonUpRight
Hotkey, n, ButtonDownLeft
Hotkey, ., ButtonDownRight

Hotkey, f1, ButtonSpeedDown
Hotkey, f2, ButtonSpeedUp
Hotkey, f3, ButtonAccelerationSpeedDown
Hotkey, f4, ButtonAccelerationSpeedUp
Hotkey, f5, ButtonMaxSpeedDown
Hotkey, f6, ButtonMaxSpeedUp

HotKey, ^;, Activate ; Activate/Desactivate

Hotkey, f7, ButtonWheelSpeedDown
Hotkey, f8, ButtonWheelSpeedUp
Hotkey, f9, ButtonWheelAccelerationSpeedDown
Hotkey, f10, ButtonWheelAccelerationSpeedUp
Hotkey, f11, ButtonWheelMaxSpeedDown
Hotkey, f12, ButtonWheelMaxSpeedUp

Hotkey, +, SpeedIncrementUp
Hotkey, =, SpeedIncrementUp
Hotkey, -, SpeedIncrementDown

Hotkey, #h, Left
Hotkey, #j, Down
Hotkey, #k, up
Hotkey, #l, Right

ToolTip, Mouse activated
SetTimer, RemoveToolTip, 1000

return

;Key activation support
Activate:
    if MouseActivated = true
    {
        Hotkey, *f, on
        Hotkey, *space, on
        Hotkey, *d, on
        Hotkey, *p, on
        Hotkey, *s, on
        Hotkey, *[, on

        Hotkey, *i, on
        Hotkey, *m, on

        Hotkey, k, on
        Hotkey, j, on
        Hotkey, h, on
        Hotkey, l, on
        Hotkey, u, on
        Hotkey, n, on
        Hotkey, o, on
        Hotkey, ., on

        Hotkey, f1, on
        Hotkey, f2, on
        Hotkey, f3, on
        Hotkey, f4, on
        Hotkey, f5, on
        Hotkey, f6, on

       
        Hotkey, 0, on
        Hotkey, 1, on
        Hotkey, 2, on
        Hotkey, 3, on
        Hotkey, 4, on
        Hotkey, 5, on
        Hotkey, 6, on
        Hotkey, 7, on
        Hotkey, 8, on
        Hotkey, 9, on
       
        Hotkey, q, on
        Hotkey, w, on
        Hotkey, e, on
        Hotkey, r, on
        Hotkey, t, on

        Hotkey, a, on
        Hotkey, g, on

        Hotkey, z, on
        Hotkey, x, on
        Hotkey, c, on
        Hotkey, v, on
        Hotkey, b, on

        Hotkey, f7, on
        Hotkey, f8, on
        Hotkey, f9, on
        Hotkey, f10, on
        Hotkey, f11, on
        Hotkey, f12, on

        Hotkey, +, on
        Hotkey, =, on
        Hotkey, -, on

        Hotkey, #h, on
        Hotkey, #j, on
        Hotkey, #k, on
        Hotkey, #l, on

        ToolTip, Mouse activated
        SetTimer, RemoveToolTip, 1000
        MouseActivated = false
    }
    else
    {
        goto Desactivate
    }
return

Desactivate:
    if MouseActivated = false
    {
        Hotkey, *f, off
        Hotkey, *space, off
        Hotkey, *d, off
        Hotkey, *p, off
        Hotkey, *s, off
        Hotkey, *[, off

        Hotkey, *i, off
        Hotkey, *m, off

        Hotkey, k, off
        Hotkey, j, off
        Hotkey, h, off
        Hotkey, l, off
        Hotkey, u, off
        Hotkey, n, off
        Hotkey, o, off
        Hotkey, ., off

        Hotkey, f1, off
        Hotkey, f2, off
        Hotkey, f3, off
        Hotkey, f4, off
        Hotkey, f5, off
        Hotkey, f6, off

       
        Hotkey, 0, off
        Hotkey, 1, off
        Hotkey, 2, off
        Hotkey, 3, off
        Hotkey, 4, off
        Hotkey, 5, off
        Hotkey, 6, off
        Hotkey, 7, off
        Hotkey, 8, off
        Hotkey, 9, off
       
        Hotkey, q, off
        Hotkey, w, off
        Hotkey, e, off
        Hotkey, r, off
        Hotkey, t, off

        Hotkey, a, off
        Hotkey, g, off

        Hotkey, z, off
        Hotkey, x, off
        Hotkey, c, off
        Hotkey, v, off
        Hotkey, b, off

        Hotkey, f7, off
        Hotkey, f8, off
        Hotkey, f9, off
        Hotkey, f10, off
        Hotkey, f11, off
        Hotkey, f12, off

        Hotkey, +, off
        Hotkey, =, off
        Hotkey, -, off

        Hotkey, #h, off
        Hotkey, #j, off
        Hotkey, #k, off
        Hotkey, #l, off

        ToolTip, Mouse desactivated
        SetTimer, RemoveToolTip, 1000
        MouseActivated = true
    }
return

;Mouse click support

ButtonLeftClick:
GetKeyState, already_down_state, LButton
If already_down_state = D
   return
Button2 = f
ButtonClick = Left
Goto ButtonClickStart
ButtonLeftClickIns:
GetKeyState, already_down_state, LButton
If already_down_state = D
   return
Button2 = NumPadIns
ButtonClick = Left
Goto ButtonClickStart

ButtonMiddleClick:
GetKeyState, already_down_state, MButton
If already_down_state = D
   return
Button2 = NumPad5
ButtonClick = Middle
Goto ButtonClickStart
ButtonMiddleClickClear:
GetKeyState, already_down_state, MButton
If already_down_state = D
   return
Button2 = NumPadClear
ButtonClick = Middle
Goto ButtonClickStart

ButtonRightClick:
GetKeyState, already_down_state, RButton
If already_down_state = D
   return
Button2 = .
ButtonClick = Right
Goto ButtonClickStart
ButtonRightClickDel:
GetKeyState, already_down_state, RButton
If already_down_state = D
   return
Button2 = NumPadDel
ButtonClick = Right
Goto ButtonClickStart

ButtonX1Click:
GetKeyState, already_down_state, XButton1
If already_down_state = D
   return
Button2 = NumPadDiv
ButtonClick = X1
Goto ButtonClickStart

ButtonX2Click:
GetKeyState, already_down_state, XButton2
If already_down_state = D
   return
Button2 = NumPadMult
ButtonClick = X2
Goto ButtonClickStart

ButtonClickStart:
MouseClick, %ButtonClick%,,, 1, 0, D
SetTimer, ButtonClickEnd, 10
return

ButtonClickEnd:
GetKeyState, kclickstate, %Button2%, P
if kclickstate = D
   return

SetTimer, ButtonClickEnd, off
MouseClick, %ButtonClick%,,, 1, 0, U
return

;Mouse movement support

ButtonSpeedUp:
MouseSpeed+=SpeedIncrement
ToolTip, Mouse speed: %MouseSpeed% pixels
SetTimer, RemoveToolTip, 1000
return
ButtonSpeedDown:
   MouseSpeed-=SpeedIncrement
    If MouseSpeed <= 1
    {
        MouseSpeed = 1
        ToolTip, Mouse speed: %MouseSpeed% pixel
    }
    else
        ToolTip, Mouse speed: %MouseSpeed% pixels
    SetTimer, RemoveToolTip, 1000
return
ButtonAccelerationSpeedUp:
MouseAccelerationSpeed+=SpeedIncrement
ToolTip, Mouse acceleration speed: %MouseAccelerationSpeed% pixels
SetTimer, RemoveToolTip, 1000
return
ButtonAccelerationSpeedDown:
   MouseAccelerationSpeed-=SpeedIncrement
    If MouseAccelerationSpeed <= 1
    {
        MouseAccelerationSpeed = 1
        ToolTip, Mouse acceleration speed: %MouseAccelerationSpeed% pixel
    }
    else
        ToolTip, Mouse acceleration speed: %MouseAccelerationSpeed% pixels
    SetTimer, RemoveToolTip, 1000
return

MouseCurrentSpeed = %MouseSpeed%
ToolTip, Mouse jump speed: %MouseSpeed% pixels
SetTimer, RemoveToolTip, 1000
return

Num0:
    NumPrefix .= 0
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num1:
    NumPrefix .= 1
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num2:
    NumPrefix .= 2
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num3:
    NumPrefix .= 3
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num4:
    NumPrefix .= 4
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num5:
    NumPrefix .= 5
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num6:
    NumPrefix .= 6
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num7:
    NumPrefix .= 7
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num8:
    NumPrefix .= 8
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num9:
    NumPrefix .= 9
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num12:
    NumPrefix = 12
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num25:
    NumPrefix = 25
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num50:
    NumPrefix = 50
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num75:
    NumPrefix = 75
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num100:
    NumPrefix = 100
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
num125:
    numprefix = 125
    tooltip, %numprefix%`%
    settimer, removetooltip, 1000
return
num150:
    numprefix = 150
    tooltip, %numprefix%`%
    settimer, removetooltip, 1000
return
num175:
    numprefix = 175
    tooltip, %numprefix%`%
    settimer, removetooltip, 1000
return
Num200:
    NumPrefix = 200
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return

ButtonMaxSpeedUp:
MouseMaxSpeed+=SpeedIncrement
ToolTip, Mouse maximum speed: %MouseMaxSpeed% pixels
SetTimer, RemoveToolTip, 1000
return
ButtonMaxSpeedDown:
    MouseMaxSpeed-=SpeedIncrement
    If MouseMaxSpeed <= 1
    {
        MouseMaxSpeed = 1
        ToolTip, Mouse maximum speed: %MouseMaxSpeed% pixel
    }
    else
        ToolTip, Mouse maximum speed: %MouseMaxSpeed% pixels
    SetTimer, RemoveToolTip, 1000
return

ButtonRotationAngleUp:
MouseRotationAnglePart++
If MouseRotationAnglePart >= 8
   MouseRotationAnglePart = 0
MouseRotationAngle = %MouseRotationAnglePart%
MouseRotationAngle *= 45
ToolTip, Mouse rotation angle: %MouseRotationAngle%°
SetTimer, RemoveToolTip, 1000
return
ButtonRotationAngleDown:
MouseRotationAnglePart--
If MouseRotationAnglePart < 0
   MouseRotationAnglePart = 7
MouseRotationAngle = %MouseRotationAnglePart%
MouseRotationAngle *= 45
ToolTip, Mouse rotation angle: %MouseRotationAngle%°
SetTimer, RemoveToolTip, 1000      
return

ButtonUp:
ButtonDown:
ButtonLeft:
ButtonRight:
ButtonUpLeft:
ButtonUpRight:
ButtonDownLeft:
ButtonDownRight:
If Button <> 0
{
   IfNotInString, A_ThisHotkey, %Button%
   {
      MouseCurrentAccelerationSpeed = 0
      MouseCurrentSpeed = %MouseSpeed%
   }
}
StringReplace, Button, A_ThisHotkey, *

ButtonAccelerationStart:
If MouseAccelerationSpeed >= 1
{
   If MouseMaxSpeed > %MouseCurrentSpeed%
{
      Temp = 0.001
      Temp *= %MouseAccelerationSpeed%
      MouseCurrentAccelerationSpeed += %Temp%
      MouseCurrentSpeed += %MouseCurrentAccelerationSpeed%
   }
}

;MouseRotationAngle convertion to speed of button direction
{
   MouseCurrentSpeedToDirection = %MouseRotationAngle%
   MouseCurrentSpeedToDirection /= 90.0
   Temp = %MouseCurrentSpeedToDirection%

   if Temp >= 0
   {
      if Temp < 1
      {
         MouseCurrentSpeedToDirection = 1
         MouseCurrentSpeedToDirection -= %Temp%
         Goto EndMouseCurrentSpeedToDirectionCalculation
      }
   }
   if Temp >= 1
   {
      if Temp < 2
      {
         MouseCurrentSpeedToDirection = 0
         Temp -= 1
         MouseCurrentSpeedToDirection -= %Temp%
         Goto EndMouseCurrentSpeedToDirectionCalculation
      }
   }
   if Temp >= 2
   {
      if Temp < 3
      {
         MouseCurrentSpeedToDirection = -1
         Temp -= 2
         MouseCurrentSpeedToDirection += %Temp%
         Goto EndMouseCurrentSpeedToDirectionCalculation
      }
   }
   if Temp >= 3
   {
      if Temp < 4
      {
         MouseCurrentSpeedToDirection = 0
         Temp -= 3
         MouseCurrentSpeedToDirection += %Temp%
         Goto EndMouseCurrentSpeedToDirectionCalculation
      }
   }
}
EndMouseCurrentSpeedToDirectionCalculation:

;MouseRotationAngle convertion to speed of 90 degrees to right
{
   MouseCurrentSpeedToSide = %MouseRotationAngle%
   MouseCurrentSpeedToSide /= 90.0
   Temp = %MouseCurrentSpeedToSide%
   Transform, Temp, mod, %Temp%, 4

   if Temp >= 0
   {
      if Temp < 1
      {
         MouseCurrentSpeedToSide = 0
         MouseCurrentSpeedToSide += %Temp%
         Goto EndMouseCurrentSpeedToSideCalculation
      }
   }
   if Temp >= 1
   {
      if Temp < 2
      {
         MouseCurrentSpeedToSide = 1
         Temp -= 1
         MouseCurrentSpeedToSide -= %Temp%
         Goto EndMouseCurrentSpeedToSideCalculation
      }
   }
   if Temp >= 2
   {
      if Temp < 3
      {
         MouseCurrentSpeedToSide = 0
         Temp -= 2
         MouseCurrentSpeedToSide -= %Temp%
         Goto EndMouseCurrentSpeedToSideCalculation
      }
   }
   if Temp >= 3
   {
      if Temp < 4
      {
         MouseCurrentSpeedToSide = -1
         Temp -= 3
         MouseCurrentSpeedToSide += %Temp%
         Goto EndMouseCurrentSpeedToSideCalculation
      }
   }
}
EndMouseCurrentSpeedToSideCalculation:

MouseCurrentSpeedToDirection *= %MouseCurrentSpeed%
MouseCurrentSpeedToSide *= %MouseCurrentSpeed%

Temp = %MouseRotationAnglePart%
Transform, Temp, Mod, %Temp%, 2

If Button = k
{
    if NumPrefix is number
    {
        Percent := NumPrefix , Percent += 0 ; convert to number
        if %Percent% = 0
            Percent := 100
        Offset := Ceil((Percent * A_ScreenHeight) / 100)
        MouseGetPos, xpos, ypos
        MouseMove, xpos, ypos - Offset, 0
        ToolTip, Moved %Percent%`% (%Offset% pixels)
        SetTimer, RemoveToolTip, 1000
        NumPrefix := ""
        Button := ""
    }
    else
    {
        if Temp = 1
        {
            MouseCurrentSpeedToSide *= 2
            MouseCurrentSpeedToDirection *= 2
        }
        MouseCurrentSpeedToDirection *= -1
        MouseMove, %MouseCurrentSpeedToSide%, %MouseCurrentSpeedToDirection%, 1, R
    }
}
else if Button = j
{
    if NumPrefix is number
    {
        Percent := NumPrefix , Percent += 0 ; convert to number
        if %Percent% = 0
            Percent := 100
        Offset := Ceil((Percent * A_ScreenHeight) / 100)
        MouseGetPos, xpos, ypos
        MouseMove, xpos, ypos + Offset, 0
        ToolTip, Moved %Percent%`% (%Offset% pixels)
        SetTimer, RemoveToolTip, 1000
        NumPrefix := ""
        Button := ""
    }
    else
    {
        if Temp = 1
        {
            MouseCurrentSpeedToSide *= 2
            MouseCurrentSpeedToDirection *= 2
        }
        MouseCurrentSpeedToSide *= -1
        MouseMove, %MouseCurrentSpeedToSide%, %MouseCurrentSpeedToDirection%, 0, R
    }
}
;else if Button = NumPadLeft
else if Button = h
{
    if NumPrefix is number
    {
        Percent := NumPrefix , Percent += 0 ; convert to number
        if %Percent% = 0
            Percent := 100
        Offset := Ceil((Percent * A_ScreenWidth) / 100)
        MouseGetPos, xpos, ypos
        MouseMove, xpos - Offset, ypos, 0
        ToolTip, Moved %Percent%`% (%Offset% pixels)
        SetTimer, RemoveToolTip, 1000
        NumPrefix := ""
        Button := ""
    }
    else
    {
        if Temp = 1
        {
            MouseCurrentSpeedToSide *= 2
            MouseCurrentSpeedToDirection *= 2
        }
        MouseCurrentSpeedToSide *= -1
        MouseCurrentSpeedToDirection *= -1
        MouseMove, %MouseCurrentSpeedToDirection%, %MouseCurrentSpeedToSide%, 0, R
    }
}
else if Button = l
{
    if NumPrefix is number
    {
        Percent := NumPrefix , Percent += 0 ; convert to number
        if %Percent% = 0
            Percent := 100
        Offset := Ceil((Percent * A_ScreenWidth) / 100)
        MouseGetPos, xpos, ypos
        MouseMove, xpos + Offset, ypos, 0
        ToolTip, Moved %Percent%`% (%Offset% pixels)
        SetTimer, RemoveToolTip, 1000
        NumPrefix := ""
        Button := ""
    }
    else
    {
        if Temp = 1
        {
            MouseCurrentSpeedToSide *= 2
            MouseCurrentSpeedToDirection *= 2
        }
        MouseMove, %MouseCurrentSpeedToDirection%, %MouseCurrentSpeedToSide%, 0, R
    }
}
else if Button = u
{
    if NumPrefix is number
    {
        Percent := NumPrefix , Percent += 0 ; convert to number
        if %Percent% = 0
            Percent := 100
        Offset := Ceil((Percent * A_ScreenWidth) / 100)
        MouseGetPos, xpos, ypos
        MouseMove, xpos - Offset, ypos - Offset, 0
        ToolTip, Moved %Percent%`% (%Offset% pixels)
        SetTimer, RemoveToolTip, 1000
        NumPrefix := ""
        Button := ""
    }
    else
    {
        Temp = %MouseCurrentSpeedToDirection%
        Temp -= %MouseCurrentSpeedToSide%
        Temp *= -1
        Temp2 = %MouseCurrentSpeedToDirection%
        Temp2 += %MouseCurrentSpeedToSide%
        Temp2 *= -1
        MouseMove, %Temp%, %Temp2%, 0, R
    }
}
else if Button = o
{
    if NumPrefix is number
    {
        Percent := NumPrefix , Percent += 0 ; convert to number
        if %Percent% = 0
            Percent := 100
        Offset := Ceil((Percent * A_ScreenWidth) / 100)
        MouseGetPos, xpos, ypos
        MouseMove, xpos + Offset, ypos - Offset, 0
        ToolTip, Moved %Percent%`% (%Offset% pixels)
        SetTimer, RemoveToolTip, 1000
        NumPrefix := ""
        Button := ""
    }
    else
    {
        Temp = %MouseCurrentSpeedToDirection%
        Temp += %MouseCurrentSpeedToSide%
        Temp2 = %MouseCurrentSpeedToDirection%
        Temp2 -= %MouseCurrentSpeedToSide%
        Temp2 *= -1
        MouseMove, %Temp%, %Temp2%, 0, R
    }
}
else if Button = n
{
    if NumPrefix is number
    {
        Percent := NumPrefix , Percent += 0 ; convert to number
        if %Percent% = 0
            Percent := 100
        Offset := Ceil((Percent * A_ScreenWidth) / 100)
        MouseGetPos, xpos, ypos
        MouseMove, xpos - Offset, ypos + Offset, 0
        ToolTip, Moved %Percent%`% (%Offset% pixels)
        SetTimer, RemoveToolTip, 1000
        NumPrefix := ""
        Button := ""
    }
    else
    {
        Temp = %MouseCurrentSpeedToDirection%
        Temp += %MouseCurrentSpeedToSide%
        Temp *= -1
        Temp2 = %MouseCurrentSpeedToDirection%
        Temp2 -= %MouseCurrentSpeedToSide%
        MouseMove, %Temp%, %Temp2%, 0, R
    }
}
else if Button = .
{
    if NumPrefix is number
    {
        Percent := NumPrefix , Percent += 0 ; convert to number
        if %Percent% = 0
            Percent := 100
        Offset := Ceil((Percent * A_ScreenWidth) / 100)
        MouseGetPos, xpos, ypos
        MouseMove, xpos + Offset, ypos + Offset, 0
        ToolTip, Moved %Percent%`% (%Offset% pixels)
        SetTimer, RemoveToolTip, 1000
        NumPrefix := ""
        Button := ""
    }
    else
    {
        Temp = %MouseCurrentSpeedToDirection%
        Temp -= %MouseCurrentSpeedToSide%
        Temp2 *= -1
        Temp2 = %MouseCurrentSpeedToDirection%
        Temp2 += %MouseCurrentSpeedToSide%
        MouseMove, %Temp%, %Temp2%, 0, R
    }
}

SetTimer, ButtonAccelerationEnd, 10
return

ButtonAccelerationEnd:
GetKeyState, kstate, %Button%, P
if kstate = D
   Goto ButtonAccelerationStart

SetTimer, ButtonAccelerationEnd, off
MouseCurrentAccelerationSpeed = 0
MouseCurrentSpeed = %MouseSpeed%
Button = 0
return

;Mouse wheel movement support

ButtonWheelSpeedUp:
MouseWheelSpeed+=SpeedIncrement
RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
If MouseWheelSpeedMultiplier <= 0
   MouseWheelSpeedMultiplier = 1
MouseWheelSpeedReal = %MouseWheelSpeed%
MouseWheelSpeedReal *= %MouseWheelSpeedMultiplier%
ToolTip, Mouse wheel speed: %MouseWheelSpeedReal% lines
SetTimer, RemoveToolTip, 1000
return
ButtonWheelSpeedDown:
RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
If MouseWheelSpeedMultiplier <= 0
   MouseWheelSpeedMultiplier = 1
If MouseWheelSpeedReal > %MouseWheelSpeedMultiplier%
{
   MouseWheelSpeed-=SpeedIncrement
   MouseWheelSpeedReal = %MouseWheelSpeed%
   MouseWheelSpeedReal *= %MouseWheelSpeedMultiplier%
}
If MouseWheelSpeedReal = 1
   ToolTip, Mouse wheel speed: %MouseWheelSpeedReal% line
else
   ToolTip, Mouse wheel speed: %MouseWheelSpeedReal% lines
SetTimer, RemoveToolTip, 1000
return

ButtonWheelAccelerationSpeedUp:
MouseWheelAccelerationSpeed+=SpeedIncrement
RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
If MouseWheelSpeedMultiplier <= 0
   MouseWheelSpeedMultiplier = 1
MouseWheelAccelerationSpeedReal = %MouseWheelAccelerationSpeed%
MouseWheelAccelerationSpeedReal *= %MouseWheelSpeedMultiplier%
ToolTip, Mouse wheel acceleration speed: %MouseWheelAccelerationSpeedReal% lines
SetTimer, RemoveToolTip, 1000
return
ButtonWheelAccelerationSpeedDown:
RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
If MouseWheelSpeedMultiplier <= 0
   MouseWheelSpeedMultiplier = 1
If MouseWheelAccelerationSpeed > 1
{
   MouseWheelAccelerationSpeed-=SpeedIncrement
   MouseWheelAccelerationSpeedReal = %MouseWheelAccelerationSpeed%
   MouseWheelAccelerationSpeedReal *= %MouseWheelSpeedMultiplier%
}
If MouseWheelAccelerationSpeedReal = 1
   ToolTip, Mouse wheel acceleration speed: %MouseWheelAccelerationSpeedReal% line
else
   ToolTip, Mouse wheel acceleration speed: %MouseWheelAccelerationSpeedReal% lines
SetTimer, RemoveToolTip, 1000
return

ButtonWheelMaxSpeedUp:
MouseWheelMaxSpeed+=SpeedIncrement
RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
If MouseWheelSpeedMultiplier <= 0
   MouseWheelSpeedMultiplier = 1
MouseWheelMaxSpeedReal = %MouseWheelMaxSpeed%
MouseWheelMaxSpeedReal *= %MouseWheelSpeedMultiplier%
ToolTip, Mouse wheel maximum speed: %MouseWheelMaxSpeedReal% lines
SetTimer, RemoveToolTip, 1000
return
ButtonWheelMaxSpeedDown:
RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
If MouseWheelSpeedMultiplier <= 0
   MouseWheelSpeedMultiplier = 1
If MouseWheelMaxSpeed > 1
{
   MouseWheelMaxSpeed-=SpeedIncrement
   MouseWheelMaxSpeedReal = %MouseWheelMaxSpeed%
   MouseWheelMaxSpeedReal *= %MouseWheelSpeedMultiplier%
}
If MouseWheelMaxSpeedReal = 1
   ToolTip, Mouse wheel maximum speed: %MouseWheelMaxSpeedReal% line
else
   ToolTip, Mouse wheel maximum speed: %MouseWheelMaxSpeedReal% lines
SetTimer, RemoveToolTip, 1000
return

ButtonWheelUp:
ButtonWheelDown:

If Button <> 0
{
   If Button <> %A_ThisHotkey%
   {
      MouseWheelCurrentAccelerationSpeed = 0
      MouseWheelCurrentSpeed = %MouseWheelSpeed%
   }
}
StringReplace, Button, A_ThisHotkey, *

ButtonWheelAccelerationStart:
If MouseWheelAccelerationSpeed >= 1
{
   If MouseWheelMaxSpeed > %MouseWheelCurrentSpeed%
   {
      Temp = 0.001
      Temp *= %MouseWheelAccelerationSpeed%
      MouseWheelCurrentAccelerationSpeed += %Temp%
      MouseWheelCurrentSpeed += %MouseWheelCurrentAccelerationSpeed%
   }
}

If Button = i
   MouseClick, wheelup,,, %MouseWheelCurrentSpeed%, 0, D
else if Button = m
   MouseClick, wheeldown,,, %MouseWheelCurrentSpeed%, 0, D

SetTimer, ButtonWheelAccelerationEnd, 100
return

ButtonWheelAccelerationEnd:
GetKeyState, kstate, %Button%, P
if kstate = D
   Goto ButtonWheelAccelerationStart

MouseWheelCurrentAccelerationSpeed = 0
MouseWheelCurrentSpeed = %MouseWheelSpeed%
Button = 0
return

RemoveToolTip:
SetTimer, RemoveToolTip, Off
ToolTip
return

SpeedIncrementUp:
    SpeedIncrement++
   ToolTip, Speed increment: %SpeedIncrement% pixels
    SetTimer, RemoveToolTip, 1000
return

SpeedIncrementDown:
    SpeedIncrement--
    if SpeedIncrement < 0
        SpeedIncrement = 0
   ToolTip, Speed increment: %SpeedIncrement% pixels
    SetTimer, RemoveToolTip, 1000
return

Left:
    Send {Left down}
return

Down:
    Send {Down down}
return

Up:
    Send {Up down}
return

Right:
    Send {Right down}
return



Report this post
Top
  
Reply with quote  
 Post subject: vimouse (latest version)
PostPosted: March 21st, 2012, 4:51 pm 
This post contains the latest version, see previous post for description of vimouse

Code:

#SingleInstance force

usage =
(
    usage:
    ctrl-; : Mouse activate/desactivate
    h/j/k/l : left/down/up/right (may be preceded by a numeric percentage prefix)
    u/n/o/. : left up/left down/right up/right down (diagonal movements, may be preceded by a numeric percentage prefix)
    Any number : Percentage prefix (how many percent of the screen to move the cursor, followed by movement keys h/j/k/l)
    q/w/e/r/t/a/g/z/x/c/v/b : Percentage prefix presets (press them to see their values, followed by movement keys h/j/k/l)
    s/p : middle click
    s/[ : right click
    i/m : mouse wheel up/down
    f1/f2 : mouse cursor speed down/up
    f3/f4 : mouse cursor acceleration speed /down/up
    f5/f6 : mouse cursor max speed down/up
    f7/f8 : mouse wheel speed down/up
    f9/f10 : mouse wheel acceleration down/up
    f11/f12 : mouse wheel max speed down/up
    -/=, + : speed increment (from how much to increment the speed up or down)
    win+(h/j/k/l) : left/down/up/right arrow
)
msgbox ,, vimouse, %usage%

;START OF CONFIG SECTION

; De combien de pixel le curseur se deplace
MouseSpeed = 1
; La vitesse a laquelle le pointeur atteint sa vitesse maximal
MouseAccelerationSpeed = 600
; La vitesse maximal que la souris ira une fois acceleree
MouseMaxSpeed = 600
; Facteur d'incrementation de vitesse
SpeedIncrement = 10

MouseActivated = false
NumPrefix := ""

;Mouse wheel speed is also set on Control Panel. As that
;will affect the normal mouse behavior, the real speed of
;these three below are times the normal mouse wheel speed.
MouseWheelSpeed = 1
MouseWheelAccelerationSpeed = 1
MouseWheelMaxSpeed = 1

MouseRotationAngle = 0

;END OF CONFIG SECTION

;This is needed or key presses would faulty send their natural
;actions. Like NumPadDiv would send sometimes "/" to the
;screen.       
#InstallKeybdHook

Temp = 0
Temp2 = 0

MouseCurrentAccelerationSpeed = 0
MouseCurrentSpeed = %MouseSpeed%

MouseWheelCurrentAccelerationSpeed = 0
MouseWheelCurrentSpeed = %MouseSpeed%

SetKeyDelay, -1
SetMouseDelay, -1

Hotkey, *f, ButtonLeftClick
Hotkey, *space, ButtonLeftClick
Hotkey, *d, ButtonMiddleClick
Hotkey, *p, ButtonMiddleClick
Hotkey, *s, ButtonRightClick
Hotkey, *[, ButtonRightClick

Hotkey, *i, ButtonWheelUp
Hotkey, *m, ButtonWheelDown

Hotkey, 0, Num0
Hotkey, 1, Num1
Hotkey, 2, Num2
Hotkey, 3, Num3
Hotkey, 4, Num4
Hotkey, 5, Num5
Hotkey, 6, Num6
Hotkey, 7, Num7
Hotkey, 8, Num8
Hotkey, 9, Num9

Hotkey, q, Num1
Hotkey, w, Num3
Hotkey, e, Num6
Hotkey, r, Num12
Hotkey, t, Num25

Hotkey, a, Num50
Hotkey, g, Num75

Hotkey, z, Num100
Hotkey, x, Num125
Hotkey, c, Num150
Hotkey, v, Num175
Hotkey, b, Num200

Hotkey, k, ButtonUp
Hotkey, j, ButtonDown
Hotkey, h, ButtonLeft
Hotkey, l, ButtonRight
Hotkey, u, ButtonUpLeft
Hotkey, o, ButtonUpRight
Hotkey, n, ButtonDownLeft
Hotkey, ., ButtonDownRight

Hotkey, f1, ButtonSpeedDown
Hotkey, f2, ButtonSpeedUp
Hotkey, f3, ButtonAccelerationSpeedDown
Hotkey, f4, ButtonAccelerationSpeedUp
Hotkey, f5, ButtonMaxSpeedDown
Hotkey, f6, ButtonMaxSpeedUp

HotKey, ^;, Activate ; Activate/Desactivate

Hotkey, f7, ButtonWheelSpeedDown
Hotkey, f8, ButtonWheelSpeedUp
Hotkey, f9, ButtonWheelAccelerationSpeedDown
Hotkey, f10, ButtonWheelAccelerationSpeedUp
Hotkey, f11, ButtonWheelMaxSpeedDown
Hotkey, f12, ButtonWheelMaxSpeedUp

Hotkey, +, SpeedIncrementUp
Hotkey, =, SpeedIncrementUp
Hotkey, -, SpeedIncrementDown

Hotkey, #h, Left
Hotkey, #j, Down
Hotkey, #k, up
Hotkey, #l, Right

ToolTip, Mouse activated
SetTimer, RemoveToolTip, 1000

return

;Key activation support
Activate:
    if MouseActivated = true
    {
        Hotkey, *f, on
        Hotkey, *space, on
        Hotkey, *d, on
        Hotkey, *p, on
        Hotkey, *s, on
        Hotkey, *[, on

        Hotkey, *i, on
        Hotkey, *m, on

        Hotkey, k, on
        Hotkey, j, on
        Hotkey, h, on
        Hotkey, l, on
        Hotkey, u, on
        Hotkey, n, on
        Hotkey, o, on
        Hotkey, ., on

        Hotkey, f1, on
        Hotkey, f2, on
        Hotkey, f3, on
        Hotkey, f4, on
        Hotkey, f5, on
        Hotkey, f6, on

       
        Hotkey, 0, on
        Hotkey, 1, on
        Hotkey, 2, on
        Hotkey, 3, on
        Hotkey, 4, on
        Hotkey, 5, on
        Hotkey, 6, on
        Hotkey, 7, on
        Hotkey, 8, on
        Hotkey, 9, on
       
        Hotkey, q, on
        Hotkey, w, on
        Hotkey, e, on
        Hotkey, r, on
        Hotkey, t, on

        Hotkey, a, on
        Hotkey, g, on

        Hotkey, z, on
        Hotkey, x, on
        Hotkey, c, on
        Hotkey, v, on
        Hotkey, b, on

        Hotkey, f7, on
        Hotkey, f8, on
        Hotkey, f9, on
        Hotkey, f10, on
        Hotkey, f11, on
        Hotkey, f12, on

        Hotkey, +, on
        Hotkey, =, on
        Hotkey, -, on

        Hotkey, #h, on
        Hotkey, #j, on
        Hotkey, #k, on
        Hotkey, #l, on

        ToolTip, Mouse activated
        SetTimer, RemoveToolTip, 1000
        MouseActivated = false
    }
    else
    {
        goto Desactivate
    }
return

Desactivate:
    if MouseActivated = false
    {
        Hotkey, *f, off
        Hotkey, *space, off
        Hotkey, *d, off
        Hotkey, *p, off
        Hotkey, *s, off
        Hotkey, *[, off

        Hotkey, *i, off
        Hotkey, *m, off

        Hotkey, k, off
        Hotkey, j, off
        Hotkey, h, off
        Hotkey, l, off
        Hotkey, u, off
        Hotkey, n, off
        Hotkey, o, off
        Hotkey, ., off

        Hotkey, f1, off
        Hotkey, f2, off
        Hotkey, f3, off
        Hotkey, f4, off
        Hotkey, f5, off
        Hotkey, f6, off

       
        Hotkey, 0, off
        Hotkey, 1, off
        Hotkey, 2, off
        Hotkey, 3, off
        Hotkey, 4, off
        Hotkey, 5, off
        Hotkey, 6, off
        Hotkey, 7, off
        Hotkey, 8, off
        Hotkey, 9, off
       
        Hotkey, q, off
        Hotkey, w, off
        Hotkey, e, off
        Hotkey, r, off
        Hotkey, t, off

        Hotkey, a, off
        Hotkey, g, off

        Hotkey, z, off
        Hotkey, x, off
        Hotkey, c, off
        Hotkey, v, off
        Hotkey, b, off

        Hotkey, f7, off
        Hotkey, f8, off
        Hotkey, f9, off
        Hotkey, f10, off
        Hotkey, f11, off
        Hotkey, f12, off

        Hotkey, +, off
        Hotkey, =, off
        Hotkey, -, off

        Hotkey, #h, off
        Hotkey, #j, off
        Hotkey, #k, off
        Hotkey, #l, off

        ToolTip, Mouse desactivated
        SetTimer, RemoveToolTip, 1000
        MouseActivated = true
    }
return

;Mouse click support

ButtonLeftClick:
    GetKeyState, already_down_state, LButton
    If already_down_state = D
        return
    Button2 = f
    ButtonClick = Left
    Goto ButtonClickStart
    ButtonLeftClickIns:
    GetKeyState, already_down_state, LButton
    If already_down_state = D
        return
    Button2 = NumPadIns
    ButtonClick = Left
    Goto ButtonClickStart

ButtonMiddleClick:
    GetKeyState, already_down_state, MButton
    If already_down_state = D
        return
    Button2 = NumPad5
    ButtonClick = Middle
    Goto ButtonClickStart
    ButtonMiddleClickClear:
    GetKeyState, already_down_state, MButton
    If already_down_state = D
        return
    Button2 = NumPadClear
    ButtonClick = Middle
    Goto ButtonClickStart

ButtonRightClick:
    GetKeyState, already_down_state, RButton
    If already_down_state = D
        return
    Button2 = .
    ButtonClick = Right
    Goto ButtonClickStart
    ButtonRightClickDel:
    GetKeyState, already_down_state, RButton
    If already_down_state = D
        return
    Button2 = NumPadDel
    ButtonClick = Right
    Goto ButtonClickStart

ButtonX1Click:
    GetKeyState, already_down_state, XButton1
    If already_down_state = D
        return
    Button2 = NumPadDiv
    ButtonClick = X1
    Goto ButtonClickStart

ButtonX2Click:
    GetKeyState, already_down_state, XButton2
    If already_down_state = D
        return
    Button2 = NumPadMult
    ButtonClick = X2
    Goto ButtonClickStart

ButtonClickStart:
    MouseClick, %ButtonClick%,,, 1, 0, D
    SetTimer, ButtonClickEnd, 10
return

ButtonClickEnd:
    GetKeyState, kclickstate, %Button2%, P
    if kclickstate = D
        return

    SetTimer, ButtonClickEnd, off
    MouseClick, %ButtonClick%,,, 1, 0, U
return

;Mouse movement support

ButtonSpeedUp:
    MouseSpeed+=SpeedIncrement
    ToolTip, Mouse speed: %MouseSpeed% pixels
    SetTimer, RemoveToolTip, 1000
return

ButtonSpeedDown:
   MouseSpeed-=SpeedIncrement
    If MouseSpeed <= 1
    {
        MouseSpeed = 1
        ToolTip, Mouse speed: %MouseSpeed% pixel
    }
    else
        ToolTip, Mouse speed: %MouseSpeed% pixels
    SetTimer, RemoveToolTip, 1000
return

ButtonAccelerationSpeedUp:
    MouseAccelerationSpeed+=SpeedIncrement
    ToolTip, Mouse acceleration speed: %MouseAccelerationSpeed% pixels
    SetTimer, RemoveToolTip, 1000
return

ButtonAccelerationSpeedDown:
   MouseAccelerationSpeed-=SpeedIncrement
    If MouseAccelerationSpeed <= 1
    {
        MouseAccelerationSpeed = 1
        ToolTip, Mouse acceleration speed: %MouseAccelerationSpeed% pixel
    }
    else
        ToolTip, Mouse acceleration speed: %MouseAccelerationSpeed% pixels
    SetTimer, RemoveToolTip, 1000
return

MouseCurrentSpeed = %MouseSpeed%
ToolTip, Mouse jump speed: %MouseSpeed% pixels
SetTimer, RemoveToolTip, 1000
return

Num0:
    NumPrefix .= 0
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num1:
    NumPrefix .= 1
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num2:
    NumPrefix .= 2
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num3:
    NumPrefix .= 3
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num4:
    NumPrefix .= 4
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num5:
    NumPrefix .= 5
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num6:
    NumPrefix .= 6
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num7:
    NumPrefix .= 7
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num8:
    NumPrefix .= 8
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num9:
    NumPrefix .= 9
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num12:
    NumPrefix = 12
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num25:
    NumPrefix = 25
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num50:
    NumPrefix = 50
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num75:
    NumPrefix = 75
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num100:
    NumPrefix = 100
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
num125:
    numprefix = 125
    tooltip, %numprefix%`%
    settimer, removetooltip, 1000
return
num150:
    numprefix = 150
    tooltip, %numprefix%`%
    settimer, removetooltip, 1000
return
num175:
    numprefix = 175
    tooltip, %numprefix%`%
    settimer, removetooltip, 1000
return
Num200:
    NumPrefix = 200
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return

ButtonMaxSpeedUp:
    MouseMaxSpeed+=SpeedIncrement
    ToolTip, Mouse maximum speed: %MouseMaxSpeed% pixels
    SetTimer, RemoveToolTip, 1000
    return
    ButtonMaxSpeedDown:
        MouseMaxSpeed-=SpeedIncrement
        If MouseMaxSpeed <= 1
        {
            MouseMaxSpeed = 1
            ToolTip, Mouse maximum speed: %MouseMaxSpeed% pixel
        }
        else
            ToolTip, Mouse maximum speed: %MouseMaxSpeed% pixels
        SetTimer, RemoveToolTip, 1000
return

ButtonRotationAngleUp:
    MouseRotationAnglePart++
    If MouseRotationAnglePart >= 8
        MouseRotationAnglePart = 0
    MouseRotationAngle = %MouseRotationAnglePart%
    MouseRotationAngle *= 45
    ToolTip, Mouse rotation angle: %MouseRotationAngle%°
    SetTimer, RemoveToolTip, 1000
    return
    ButtonRotationAngleDown:
    MouseRotationAnglePart--
    If MouseRotationAnglePart < 0
        MouseRotationAnglePart = 7
    MouseRotationAngle = %MouseRotationAnglePart%
    MouseRotationAngle *= 45
    ToolTip, Mouse rotation angle: %MouseRotationAngle%°
    SetTimer, RemoveToolTip, 1000      
return

ButtonUp:
ButtonDown:
ButtonLeft:
ButtonRight:
ButtonUpLeft:
ButtonUpRight:
ButtonDownLeft:
ButtonDownRight:
    If Button <> 0
    {
        IfNotInString, A_ThisHotkey, %Button%
        {
            MouseCurrentAccelerationSpeed = 0
            MouseCurrentSpeed = %MouseSpeed%
        }
    }
    StringReplace, Button, A_ThisHotkey, *

    ButtonAccelerationStart:
    If MouseAccelerationSpeed >= 1
    {
        If MouseMaxSpeed > %MouseCurrentSpeed%
    {
            Temp = 0.001
            Temp *= %MouseAccelerationSpeed%
            MouseCurrentAccelerationSpeed += %Temp%
            MouseCurrentSpeed += %MouseCurrentAccelerationSpeed%
        }
    }

    ;MouseRotationAngle convertion to speed of button direction
    {
        MouseCurrentSpeedToDirection = %MouseRotationAngle%
        MouseCurrentSpeedToDirection /= 90.0
        Temp = %MouseCurrentSpeedToDirection%

        if Temp >= 0
        {
            if Temp < 1
            {
                MouseCurrentSpeedToDirection = 1
                MouseCurrentSpeedToDirection -= %Temp%
                Goto EndMouseCurrentSpeedToDirectionCalculation
            }
        }
        if Temp >= 1
        {
            if Temp < 2
            {
                MouseCurrentSpeedToDirection = 0
                Temp -= 1
                MouseCurrentSpeedToDirection -= %Temp%
                Goto EndMouseCurrentSpeedToDirectionCalculation
            }
        }
        if Temp >= 2
        {
            if Temp < 3
            {
                MouseCurrentSpeedToDirection = -1
                Temp -= 2
                MouseCurrentSpeedToDirection += %Temp%
                Goto EndMouseCurrentSpeedToDirectionCalculation
            }
        }
        if Temp >= 3
        {
            if Temp < 4
            {
                MouseCurrentSpeedToDirection = 0
                Temp -= 3
                MouseCurrentSpeedToDirection += %Temp%
                Goto EndMouseCurrentSpeedToDirectionCalculation
            }
        }
    }
    EndMouseCurrentSpeedToDirectionCalculation:

    ;MouseRotationAngle convertion to speed of 90 degrees to right
    {
        MouseCurrentSpeedToSide = %MouseRotationAngle%
        MouseCurrentSpeedToSide /= 90.0
        Temp = %MouseCurrentSpeedToSide%
        Transform, Temp, mod, %Temp%, 4

        if Temp >= 0
        {
            if Temp < 1
            {
                MouseCurrentSpeedToSide = 0
                MouseCurrentSpeedToSide += %Temp%
                Goto EndMouseCurrentSpeedToSideCalculation
            }
        }
        if Temp >= 1
        {
            if Temp < 2
            {
                MouseCurrentSpeedToSide = 1
                Temp -= 1
                MouseCurrentSpeedToSide -= %Temp%
                Goto EndMouseCurrentSpeedToSideCalculation
            }
        }
        if Temp >= 2
        {
            if Temp < 3
            {
                MouseCurrentSpeedToSide = 0
                Temp -= 2
                MouseCurrentSpeedToSide -= %Temp%
                Goto EndMouseCurrentSpeedToSideCalculation
            }
        }
        if Temp >= 3
        {
            if Temp < 4
            {
                MouseCurrentSpeedToSide = -1
                Temp -= 3
                MouseCurrentSpeedToSide += %Temp%
                Goto EndMouseCurrentSpeedToSideCalculation
            }
        }
    }
    EndMouseCurrentSpeedToSideCalculation:

    MouseCurrentSpeedToDirection *= %MouseCurrentSpeed%
    MouseCurrentSpeedToSide *= %MouseCurrentSpeed%

    Temp = %MouseRotationAnglePart%
    Transform, Temp, Mod, %Temp%, 2

    If Button = k
    {
        if NumPrefix is number
        {
            Percent := NumPrefix , Percent += 0 ; convert to number
            Offset := Ceil((Percent * A_ScreenHeight) / 100)
            MouseGetPos, xpos, ypos
            MouseMove, xpos, ypos - Offset, 0
            ToolTip, Moved %Percent%`% (%Offset% pixels)
            SetTimer, RemoveToolTip, 1000
            NumPrefix := ""
            Button := ""
        }
        else
        {
            if Temp = 1
            {
                MouseCurrentSpeedToSide *= 2
                MouseCurrentSpeedToDirection *= 2
            }
            MouseCurrentSpeedToDirection *= -1
            MouseMove, %MouseCurrentSpeedToSide%, %MouseCurrentSpeedToDirection%, 1, R
        }
    }
    else if Button = j
    {
        if NumPrefix is number
        {
            Percent := NumPrefix , Percent += 0 ; convert to number
            Offset := Ceil((Percent * A_ScreenHeight) / 100)
            MouseGetPos, xpos, ypos
            MouseMove, xpos, ypos + Offset, 0
            ToolTip, Moved %Percent%`% (%Offset% pixels)
            SetTimer, RemoveToolTip, 1000
            NumPrefix := ""
            Button := ""
        }
        else
        {
            if Temp = 1
            {
                MouseCurrentSpeedToSide *= 2
                MouseCurrentSpeedToDirection *= 2
            }
            MouseCurrentSpeedToSide *= -1
            MouseMove, %MouseCurrentSpeedToSide%, %MouseCurrentSpeedToDirection%, 0, R
        }
    }
    ;else if Button = NumPadLeft
    else if Button = h
    {
        if NumPrefix is number
        {
            Percent := NumPrefix , Percent += 0 ; convert to number
            Offset := Ceil((Percent * A_ScreenWidth) / 100)
            MouseGetPos, xpos, ypos
            MouseMove, xpos - Offset, ypos, 0
            ToolTip, Moved %Percent%`% (%Offset% pixels)
            SetTimer, RemoveToolTip, 1000
            NumPrefix := ""
            Button := ""
        }
        else
        {
            if Temp = 1
            {
                MouseCurrentSpeedToSide *= 2
                MouseCurrentSpeedToDirection *= 2
            }
            MouseCurrentSpeedToSide *= -1
            MouseCurrentSpeedToDirection *= -1
            MouseMove, %MouseCurrentSpeedToDirection%, %MouseCurrentSpeedToSide%, 0, R
        }
    }
    else if Button = l
    {
        if NumPrefix is number
        {
            Percent := NumPrefix , Percent += 0 ; convert to number
            Offset := Ceil((Percent * A_ScreenWidth) / 100)
            MouseGetPos, xpos, ypos
            MouseMove, xpos + Offset, ypos, 0
            ToolTip, Moved %Percent%`% (%Offset% pixels)
            SetTimer, RemoveToolTip, 1000
            NumPrefix := ""
            Button := ""
        }
        else
        {
            if Temp = 1
            {
                MouseCurrentSpeedToSide *= 2
                MouseCurrentSpeedToDirection *= 2
            }
            MouseMove, %MouseCurrentSpeedToDirection%, %MouseCurrentSpeedToSide%, 0, R
        }
    }
    else if Button = u
    {
        if NumPrefix is number
        {
            Percent := NumPrefix , Percent += 0 ; convert to number
            if %Percent% = 0
                Percent := 100
            Offset := Ceil((Percent * A_ScreenWidth) / 100)
            MouseGetPos, xpos, ypos
            MouseMove, xpos - Offset, ypos - Offset, 0
            ToolTip, Moved %Percent%`% (%Offset% pixels)
            SetTimer, RemoveToolTip, 1000
            NumPrefix := ""
            Button := ""
        }
        else
        {
            Temp = %MouseCurrentSpeedToDirection%
            Temp -= %MouseCurrentSpeedToSide%
            Temp *= -1
            Temp2 = %MouseCurrentSpeedToDirection%
            Temp2 += %MouseCurrentSpeedToSide%
            Temp2 *= -1
            MouseMove, %Temp%, %Temp2%, 0, R
        }
    }
    else if Button = o
    {
        if NumPrefix is number
        {
            Percent := NumPrefix , Percent += 0 ; convert to number
            Offset := Ceil((Percent * A_ScreenWidth) / 100)
            MouseGetPos, xpos, ypos
            MouseMove, xpos + Offset, ypos - Offset, 0
            ToolTip, Moved %Percent%`% (%Offset% pixels)
            SetTimer, RemoveToolTip, 1000
            NumPrefix := ""
            Button := ""
        }
        else
        {
            Temp = %MouseCurrentSpeedToDirection%
            Temp += %MouseCurrentSpeedToSide%
            Temp2 = %MouseCurrentSpeedToDirection%
            Temp2 -= %MouseCurrentSpeedToSide%
            Temp2 *= -1
            MouseMove, %Temp%, %Temp2%, 0, R
        }
    }
    else if Button = n
    {
        if NumPrefix is number
        {
            Percent := NumPrefix , Percent += 0 ; convert to number
            Offset := Ceil((Percent * A_ScreenWidth) / 100)
            MouseGetPos, xpos, ypos
            MouseMove, xpos - Offset, ypos + Offset, 0
            ToolTip, Moved %Percent%`% (%Offset% pixels)
            SetTimer, RemoveToolTip, 1000
            NumPrefix := ""
            Button := ""
        }
        else
        {
            Temp = %MouseCurrentSpeedToDirection%
            Temp += %MouseCurrentSpeedToSide%
            Temp *= -1
            Temp2 = %MouseCurrentSpeedToDirection%
            Temp2 -= %MouseCurrentSpeedToSide%
            MouseMove, %Temp%, %Temp2%, 0, R
        }
    }
    else if Button = .
    {
        if NumPrefix is number
        {
            Percent := NumPrefix , Percent += 0 ; convert to number
            if %Percent% = 0
                Percent := 100
            Offset := Ceil((Percent * A_ScreenWidth) / 100)
            MouseGetPos, xpos, ypos
            MouseMove, xpos + Offset, ypos + Offset, 0
            ToolTip, Moved %Percent%`% (%Offset% pixels)
            SetTimer, RemoveToolTip, 1000
            NumPrefix := ""
            Button := ""
        }
        else
        {
            Temp = %MouseCurrentSpeedToDirection%
            Temp -= %MouseCurrentSpeedToSide%
            Temp2 *= -1
            Temp2 = %MouseCurrentSpeedToDirection%
            Temp2 += %MouseCurrentSpeedToSide%
            MouseMove, %Temp%, %Temp2%, 0, R
        }
    }

    SetTimer, ButtonAccelerationEnd, 10
return

ButtonAccelerationEnd:
    GetKeyState, kstate, %Button%, P
    if kstate = D
        Goto ButtonAccelerationStart

    SetTimer, ButtonAccelerationEnd, off
    MouseCurrentAccelerationSpeed = 0
    MouseCurrentSpeed = %MouseSpeed%
    Button = 0
return

;Mouse wheel movement support

ButtonWheelSpeedUp:
    MouseWheelSpeed+=SpeedIncrement
    RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
    If MouseWheelSpeedMultiplier <= 0
        MouseWheelSpeedMultiplier = 1
    MouseWheelSpeedReal = %MouseWheelSpeed%
    MouseWheelSpeedReal *= %MouseWheelSpeedMultiplier%
    ToolTip, Mouse wheel speed: %MouseWheelSpeedReal% lines
    SetTimer, RemoveToolTip, 1000
return

ButtonWheelSpeedDown:
    RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
    If MouseWheelSpeedMultiplier <= 0
        MouseWheelSpeedMultiplier = 1
    MouseWheelSpeedReal = 1
    If MouseWheelSpeedReal > %MouseWheelSpeedMultiplier%
    {
        MouseWheelSpeed-=SpeedIncrement
        MouseWheelSpeedReal = %MouseWheelSpeed%
        MouseWheelSpeedReal *= %MouseWheelSpeedMultiplier%
    }
    If MouseWheelSpeedReal = 1
        ToolTip, Mouse wheel speed: %MouseWheelSpeedReal% line
    else
        ToolTip, Mouse wheel speed: %MouseWheelSpeedReal% lines
    SetTimer, RemoveToolTip, 1000
return

ButtonWheelAccelerationSpeedUp:
    MouseWheelAccelerationSpeed+=SpeedIncrement
    RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
    If MouseWheelSpeedMultiplier <= 0
        MouseWheelSpeedMultiplier = 1
    MouseWheelAccelerationSpeedReal = %MouseWheelAccelerationSpeed%
    MouseWheelAccelerationSpeedReal *= %MouseWheelSpeedMultiplier%
    ToolTip, Mouse wheel acceleration speed: %MouseWheelAccelerationSpeedReal% lines
    SetTimer, RemoveToolTip, 1000
return

ButtonWheelAccelerationSpeedDown:
    RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
    If MouseWheelSpeedMultiplier <= 0
        MouseWheelSpeedMultiplier = 1
    MouseWheelAccelerationSpeedReal = 1
    If MouseWheelAccelerationSpeed > 1
    {
        MouseWheelAccelerationSpeed-=SpeedIncrement
        MouseWheelAccelerationSpeedReal = %MouseWheelAccelerationSpeed%
        MouseWheelAccelerationSpeedReal *= %MouseWheelSpeedMultiplier%
    }
    If MouseWheelAccelerationSpeedReal = 1
        ToolTip, Mouse wheel acceleration speed: %MouseWheelAccelerationSpeedReal% line
    else
        ToolTip, Mouse wheel acceleration speed: %MouseWheelAccelerationSpeedReal% lines
    SetTimer, RemoveToolTip, 1000
return

ButtonWheelMaxSpeedUp:
    MouseWheelMaxSpeed+=SpeedIncrement
    RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
    If MouseWheelSpeedMultiplier <= 0
        MouseWheelSpeedMultiplier = 1
    MouseWheelMaxSpeedReal = %MouseWheelMaxSpeed%
    MouseWheelMaxSpeedReal *= %MouseWheelSpeedMultiplier%
    ToolTip, Mouse wheel maximum speed: %MouseWheelMaxSpeedReal% lines
    SetTimer, RemoveToolTip, 1000
return

ButtonWheelMaxSpeedDown:
    RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
    If MouseWheelSpeedMultiplier <= 0
        MouseWheelSpeedMultiplier = 1
    MouseWheelMaxSpeedReal = 1
    If MouseWheelMaxSpeed > 1
    {
        MouseWheelMaxSpeed-=SpeedIncrement
        MouseWheelMaxSpeedReal = %MouseWheelMaxSpeed%
        MouseWheelMaxSpeedReal *= %MouseWheelSpeedMultiplier%
    }
    If MouseWheelMaxSpeedReal = 1
        ToolTip, Mouse wheel maximum speed: %MouseWheelMaxSpeedReal% line
    else
        ToolTip, Mouse wheel maximum speed: %MouseWheelMaxSpeedReal% lines
    SetTimer, RemoveToolTip, 1000
return

ButtonWheelUp:
ButtonWheelDown:

If Button <> 0
{
   If Button <> %A_ThisHotkey%
   {
      MouseWheelCurrentAccelerationSpeed = 0
      MouseWheelCurrentSpeed = %MouseWheelSpeed%
   }
}
StringReplace, Button, A_ThisHotkey, *

ButtonWheelAccelerationStart:
    If MouseWheelAccelerationSpeed >= 1
    {
        If MouseWheelMaxSpeed > %MouseWheelCurrentSpeed%
        {
            Temp = 0.001
            Temp *= %MouseWheelAccelerationSpeed%
            MouseWheelCurrentAccelerationSpeed += %Temp%
            MouseWheelCurrentSpeed += %MouseWheelCurrentAccelerationSpeed%
        }
    }

    If Button = i
        MouseClick, wheelup,,, %MouseWheelCurrentSpeed%, 0, D
    else if Button = m
        MouseClick, wheeldown,,, %MouseWheelCurrentSpeed%, 0, D

    SetTimer, ButtonWheelAccelerationEnd, 100
return

ButtonWheelAccelerationEnd:
    GetKeyState, kstate, %Button%, P
    if kstate = D
        Goto ButtonWheelAccelerationStart

    MouseWheelCurrentAccelerationSpeed = 0
    MouseWheelCurrentSpeed = %MouseWheelSpeed%
    Button = 0
    return

    RemoveToolTip:
    SetTimer, RemoveToolTip, Off
    ToolTip
return

SpeedIncrementUp:
    SpeedIncrement++
   ToolTip, Speed increment: %SpeedIncrement% pixels
    SetTimer, RemoveToolTip, 1000
return

SpeedIncrementDown:
    SpeedIncrement--
    if SpeedIncrement < 0
        SpeedIncrement = 0
   ToolTip, Speed increment: %SpeedIncrement% pixels
    SetTimer, RemoveToolTip, 1000
return

Left:
    Send {Left}
return

Down:
    Send {Down}
return

Up:
    Send {Up}
return

Right:
    Send {Right}
return



Report this post
Top
  
Reply with quote  
PostPosted: March 23rd, 2012, 5:45 pm 
usage:
ctrl-; : Mouse activate/desactivate
h/j/k/l : left/down/up/right (may be preceded by a numeric percentage prefix)
u/n/o/. : left up/left down/right up/right down (diagonal movements, may be preceded by a numeric percentage prefix)
Any number : Percentage prefix (how many percent of the screen to move the cursor, followed by movement keys h/j/k/l)
q/w/e/r/t/a/g/z/x/c/v/b : Percentage prefix presets (press them to see their values, followed by movement keys h/j/k/l)
f/space : left click
d/p : middle click
s/[ : right click
i/m : mouse wheel up/down
f1/f2 : mouse cursor speed down/up
f3/f4 : mouse cursor acceleration speed /down/up
f5/f6 : mouse cursor max speed down/up
f7/f8 : mouse wheel speed down/up
f9/f10 : mouse wheel acceleration down/up
f11/f12 : mouse wheel max speed down/up
-/=, + : speed increment (from how much to increment the speed up or down)
win+(h/j/k/l) : left/down/up/right arrow


Code:

;commenter le code de rotation et voir l'impact, je devrais pas avoir ce code dans le script

;utiliser le bouton du milieu de la souris dans firefox et visual studio et possiblement d'autres apps

;utiliser aussi les diagonales ca sauve des touches

#SingleInstance force

usage =
(
    usage:
    ctrl-; : Mouse activate/desactivate
    h/j/k/l : left/down/up/right (may be preceded by a numeric percentage prefix)
    u/n/o/. : left up/left down/right up/right down (diagonal movements, may be preceded by a numeric percentage prefix)
    Any number : Percentage prefix (how many percent of the screen to move the cursor, followed by movement keys h/j/k/l)
    q/w/e/r/t/a/g/z/x/c/v/b : Percentage prefix presets (press them to see their values, followed by movement keys h/j/k/l)
    f/space : left click
    d/p : middle click
    s/[ : right click
    i/m : mouse wheel up/down
    f1/f2 : mouse cursor speed down/up
    f3/f4 : mouse cursor acceleration speed /down/up
    f5/f6 : mouse cursor max speed down/up
    f7/f8 : mouse wheel speed down/up
    f9/f10 : mouse wheel acceleration down/up
    f11/f12 : mouse wheel max speed down/up
    -/=, + : speed increment (from how much to increment the speed up or down)
    win+(h/j/k/l) : left/down/up/right arrow
)
msgbox ,, vimouse, %usage%

;START OF CONFIG SECTION

; De combien de pixel le curseur se deplace
MouseSpeed = 1
; La vitesse a laquelle le pointeur atteint sa vitesse maximal
MouseAccelerationSpeed = 600
; La vitesse maximal que la souris ira une fois acceleree
MouseMaxSpeed = 600
; Facteur d'incrementation de vitesse
SpeedIncrement = 10

MouseActivated = false
NumPrefix := ""

;Mouse wheel speed is also set on Control Panel. As that
;will affect the normal mouse behavior, the real speed of
;these three below are times the normal mouse wheel speed.
MouseWheelSpeed = 1
MouseWheelAccelerationSpeed = 1
MouseWheelMaxSpeed = 1

MouseRotationAngle = 0

;END OF CONFIG SECTION

;This is needed or key presses would faulty send their natural
;actions. Like NumPadDiv would send sometimes "/" to the
;screen.       
#InstallKeybdHook

Temp = 0
Temp2 = 0

MouseCurrentAccelerationSpeed = 0
MouseCurrentSpeed = %MouseSpeed%

MouseWheelCurrentAccelerationSpeed = 0
MouseWheelCurrentSpeed = %MouseSpeed%

SetKeyDelay, -1
SetMouseDelay, -1

Hotkey, *f, ButtonLeftClick
Hotkey, *space, ButtonLeftClick
Hotkey, *d, ButtonMiddleClick
Hotkey, *p, ButtonMiddleClick
Hotkey, *s, ButtonRightClick
Hotkey, *[, ButtonRightClick

Hotkey, *i, ButtonWheelUp
Hotkey, *m, ButtonWheelDown

Hotkey, 0, Num0
Hotkey, 1, Num1
Hotkey, 2, Num2
Hotkey, 3, Num3
Hotkey, 4, Num4
Hotkey, 5, Num5
Hotkey, 6, Num6
Hotkey, 7, Num7
Hotkey, 8, Num8
Hotkey, 9, Num9

Hotkey, q, Num1
Hotkey, w, Num3
Hotkey, e, Num6
Hotkey, r, Num12
Hotkey, t, Num25

Hotkey, a, Num50
Hotkey, g, Num75

Hotkey, z, Num100
Hotkey, x, Num125
Hotkey, c, Num150
Hotkey, v, Num175
Hotkey, b, Num200

Hotkey, k, ButtonUp
Hotkey, j, ButtonDown
Hotkey, h, ButtonLeft
Hotkey, l, ButtonRight
Hotkey, u, ButtonUpLeft
Hotkey, o, ButtonUpRight
Hotkey, n, ButtonDownLeft
Hotkey, ., ButtonDownRight

Hotkey, f1, ButtonSpeedDown
Hotkey, f2, ButtonSpeedUp
Hotkey, f3, ButtonAccelerationSpeedDown
Hotkey, f4, ButtonAccelerationSpeedUp
Hotkey, f5, ButtonMaxSpeedDown
Hotkey, f6, ButtonMaxSpeedUp

HotKey, ^;, Activate ; Activate/Desactivate

Hotkey, f7, ButtonWheelSpeedDown
Hotkey, f8, ButtonWheelSpeedUp
Hotkey, f9, ButtonWheelAccelerationSpeedDown
Hotkey, f10, ButtonWheelAccelerationSpeedUp
Hotkey, f11, ButtonWheelMaxSpeedDown
Hotkey, f12, ButtonWheelMaxSpeedUp

Hotkey, +, SpeedIncrementUp
Hotkey, =, SpeedIncrementUp
Hotkey, -, SpeedIncrementDown

Hotkey, #h, Left
Hotkey, #j, Down
Hotkey, #k, up
Hotkey, #l, Right

ToolTip, Mouse activated
SetTimer, RemoveToolTip, 1000

return

;Key activation support
Activate:
    if MouseActivated = true
    {
        Hotkey, *f, on
        Hotkey, *space, on
        Hotkey, *d, on
        Hotkey, *p, on
        Hotkey, *s, on
        Hotkey, *[, on

        Hotkey, *i, on
        Hotkey, *m, on

        Hotkey, k, on
        Hotkey, j, on
        Hotkey, h, on
        Hotkey, l, on
        Hotkey, u, on
        Hotkey, n, on
        Hotkey, o, on
        Hotkey, ., on

        Hotkey, f1, on
        Hotkey, f2, on
        Hotkey, f3, on
        Hotkey, f4, on
        Hotkey, f5, on
        Hotkey, f6, on

       
        Hotkey, 0, on
        Hotkey, 1, on
        Hotkey, 2, on
        Hotkey, 3, on
        Hotkey, 4, on
        Hotkey, 5, on
        Hotkey, 6, on
        Hotkey, 7, on
        Hotkey, 8, on
        Hotkey, 9, on
       
        Hotkey, q, on
        Hotkey, w, on
        Hotkey, e, on
        Hotkey, r, on
        Hotkey, t, on

        Hotkey, a, on
        Hotkey, g, on

        Hotkey, z, on
        Hotkey, x, on
        Hotkey, c, on
        Hotkey, v, on
        Hotkey, b, on

        Hotkey, f7, on
        Hotkey, f8, on
        Hotkey, f9, on
        Hotkey, f10, on
        Hotkey, f11, on
        Hotkey, f12, on

        Hotkey, +, on
        Hotkey, =, on
        Hotkey, -, on

        Hotkey, #h, on
        Hotkey, #j, on
        Hotkey, #k, on
        Hotkey, #l, on

        ToolTip, Mouse activated
        SetTimer, RemoveToolTip, 1000
        MouseActivated = false
    }
    else
    {
        goto Desactivate
    }
return

Desactivate:
    if MouseActivated = false
    {
        Hotkey, *f, off
        Hotkey, *space, off
        Hotkey, *d, off
        Hotkey, *p, off
        Hotkey, *s, off
        Hotkey, *[, off

        Hotkey, *i, off
        Hotkey, *m, off

        Hotkey, k, off
        Hotkey, j, off
        Hotkey, h, off
        Hotkey, l, off
        Hotkey, u, off
        Hotkey, n, off
        Hotkey, o, off
        Hotkey, ., off

        Hotkey, f1, off
        Hotkey, f2, off
        Hotkey, f3, off
        Hotkey, f4, off
        Hotkey, f5, off
        Hotkey, f6, off

       
        Hotkey, 0, off
        Hotkey, 1, off
        Hotkey, 2, off
        Hotkey, 3, off
        Hotkey, 4, off
        Hotkey, 5, off
        Hotkey, 6, off
        Hotkey, 7, off
        Hotkey, 8, off
        Hotkey, 9, off
       
        Hotkey, q, off
        Hotkey, w, off
        Hotkey, e, off
        Hotkey, r, off
        Hotkey, t, off

        Hotkey, a, off
        Hotkey, g, off

        Hotkey, z, off
        Hotkey, x, off
        Hotkey, c, off
        Hotkey, v, off
        Hotkey, b, off

        Hotkey, f7, off
        Hotkey, f8, off
        Hotkey, f9, off
        Hotkey, f10, off
        Hotkey, f11, off
        Hotkey, f12, off

        Hotkey, +, off
        Hotkey, =, off
        Hotkey, -, off

        Hotkey, #h, off
        Hotkey, #j, off
        Hotkey, #k, off
        Hotkey, #l, off

        ToolTip, Mouse desactivated
        SetTimer, RemoveToolTip, 1000
        MouseActivated = true
    }
return

;Mouse click support

ButtonLeftClick:
    GetKeyState, already_down_state, LButton
    If already_down_state = D
        return
    Button2 = f
    ButtonClick = Left
    Goto ButtonClickStart
    ButtonLeftClickIns:
    GetKeyState, already_down_state, LButton
    If already_down_state = D
        return
    Button2 = NumPadIns
    ButtonClick = Left
    Goto ButtonClickStart

ButtonMiddleClick:
    GetKeyState, already_down_state, MButton
    If already_down_state = D
        return
    Button2 = NumPad5
    ButtonClick = Middle
    Goto ButtonClickStart
    ButtonMiddleClickClear:
    GetKeyState, already_down_state, MButton
    If already_down_state = D
        return
    Button2 = NumPadClear
    ButtonClick = Middle
    Goto ButtonClickStart

ButtonRightClick:
    GetKeyState, already_down_state, RButton
    If already_down_state = D
        return
    Button2 = .
    ButtonClick = Right
    Goto ButtonClickStart
    ButtonRightClickDel:
    GetKeyState, already_down_state, RButton
    If already_down_state = D
        return
    Button2 = NumPadDel
    ButtonClick = Right
    Goto ButtonClickStart

ButtonX1Click:
    GetKeyState, already_down_state, XButton1
    If already_down_state = D
        return
    Button2 = NumPadDiv
    ButtonClick = X1
    Goto ButtonClickStart

ButtonX2Click:
    GetKeyState, already_down_state, XButton2
    If already_down_state = D
        return
    Button2 = NumPadMult
    ButtonClick = X2
    Goto ButtonClickStart

ButtonClickStart:
    MouseClick, %ButtonClick%,,, 1, 0, D
    SetTimer, ButtonClickEnd, 10
return

ButtonClickEnd:
    GetKeyState, kclickstate, %Button2%, P
    if kclickstate = D
        return

    SetTimer, ButtonClickEnd, off
    MouseClick, %ButtonClick%,,, 1, 0, U
return

;Mouse movement support

ButtonSpeedUp:
    MouseSpeed+=SpeedIncrement
    ToolTip, Mouse speed: %MouseSpeed% pixels
    SetTimer, RemoveToolTip, 1000
return

ButtonSpeedDown:
   MouseSpeed-=SpeedIncrement
    If MouseSpeed <= 1
    {
        MouseSpeed = 1
        ToolTip, Mouse speed: %MouseSpeed% pixel
    }
    else
        ToolTip, Mouse speed: %MouseSpeed% pixels
    SetTimer, RemoveToolTip, 1000
return

ButtonAccelerationSpeedUp:
    MouseAccelerationSpeed+=SpeedIncrement
    ToolTip, Mouse acceleration speed: %MouseAccelerationSpeed% pixels
    SetTimer, RemoveToolTip, 1000
return

ButtonAccelerationSpeedDown:
   MouseAccelerationSpeed-=SpeedIncrement
    If MouseAccelerationSpeed <= 1
    {
        MouseAccelerationSpeed = 1
        ToolTip, Mouse acceleration speed: %MouseAccelerationSpeed% pixel
    }
    else
        ToolTip, Mouse acceleration speed: %MouseAccelerationSpeed% pixels
    SetTimer, RemoveToolTip, 1000
return

MouseCurrentSpeed = %MouseSpeed%
ToolTip, Mouse jump speed: %MouseSpeed% pixels
SetTimer, RemoveToolTip, 1000
return

Num0:
    NumPrefix .= 0
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num1:
    NumPrefix .= 1
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num2:
    NumPrefix .= 2
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num3:
    NumPrefix .= 3
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num4:
    NumPrefix .= 4
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num5:
    NumPrefix .= 5
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num6:
    NumPrefix .= 6
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num7:
    NumPrefix .= 7
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num8:
    NumPrefix .= 8
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num9:
    NumPrefix .= 9
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num12:
    NumPrefix = 12
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num25:
    NumPrefix = 25
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num50:
    NumPrefix = 50
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num75:
    NumPrefix = 75
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
Num100:
    NumPrefix = 100
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return
num125:
    numprefix = 125
    tooltip, %numprefix%`%
    settimer, removetooltip, 1000
return
num150:
    numprefix = 150
    tooltip, %numprefix%`%
    settimer, removetooltip, 1000
return
num175:
    numprefix = 175
    tooltip, %numprefix%`%
    settimer, removetooltip, 1000
return
Num200:
    NumPrefix = 200
    ToolTip, %NumPrefix%`%
    SetTimer, RemoveToolTip, 1000
return

ButtonMaxSpeedUp:
    MouseMaxSpeed+=SpeedIncrement
    ToolTip, Mouse maximum speed: %MouseMaxSpeed% pixels
    SetTimer, RemoveToolTip, 1000
    return
    ButtonMaxSpeedDown:
        MouseMaxSpeed-=SpeedIncrement
        If MouseMaxSpeed <= 1
        {
            MouseMaxSpeed = 1
            ToolTip, Mouse maximum speed: %MouseMaxSpeed% pixel
        }
        else
            ToolTip, Mouse maximum speed: %MouseMaxSpeed% pixels
        SetTimer, RemoveToolTip, 1000
return

ButtonRotationAngleUp:
    MouseRotationAnglePart++
    If MouseRotationAnglePart >= 8
        MouseRotationAnglePart = 0
    MouseRotationAngle = %MouseRotationAnglePart%
    MouseRotationAngle *= 45
    ToolTip, Mouse rotation angle: %MouseRotationAngle%°
    SetTimer, RemoveToolTip, 1000
    return
    ButtonRotationAngleDown:
    MouseRotationAnglePart--
    If MouseRotationAnglePart < 0
        MouseRotationAnglePart = 7
    MouseRotationAngle = %MouseRotationAnglePart%
    MouseRotationAngle *= 45
    ToolTip, Mouse rotation angle: %MouseRotationAngle%°
    SetTimer, RemoveToolTip, 1000      
return

ButtonUp:
ButtonDown:
ButtonLeft:
ButtonRight:
ButtonUpLeft:
ButtonUpRight:
ButtonDownLeft:
ButtonDownRight:
    If Button <> 0
    {
        IfNotInString, A_ThisHotkey, %Button%
        {
            MouseCurrentAccelerationSpeed = 0
            MouseCurrentSpeed = %MouseSpeed%
        }
    }
    StringReplace, Button, A_ThisHotkey, *

    ButtonAccelerationStart:
    If MouseAccelerationSpeed >= 1
    {
        If MouseMaxSpeed > %MouseCurrentSpeed%
    {
            Temp = 0.001
            Temp *= %MouseAccelerationSpeed%
            MouseCurrentAccelerationSpeed += %Temp%
            MouseCurrentSpeed += %MouseCurrentAccelerationSpeed%
        }
    }

    ;MouseRotationAngle convertion to speed of button direction
    {
        MouseCurrentSpeedToDirection = %MouseRotationAngle%
        MouseCurrentSpeedToDirection /= 90.0
        Temp = %MouseCurrentSpeedToDirection%

        if Temp >= 0
        {
            if Temp < 1
            {
                MouseCurrentSpeedToDirection = 1
                MouseCurrentSpeedToDirection -= %Temp%
                Goto EndMouseCurrentSpeedToDirectionCalculation
            }
        }
        if Temp >= 1
        {
            if Temp < 2
            {
                MouseCurrentSpeedToDirection = 0
                Temp -= 1
                MouseCurrentSpeedToDirection -= %Temp%
                Goto EndMouseCurrentSpeedToDirectionCalculation
            }
        }
        if Temp >= 2
        {
            if Temp < 3
            {
                MouseCurrentSpeedToDirection = -1
                Temp -= 2
                MouseCurrentSpeedToDirection += %Temp%
                Goto EndMouseCurrentSpeedToDirectionCalculation
            }
        }
        if Temp >= 3
        {
            if Temp < 4
            {
                MouseCurrentSpeedToDirection = 0
                Temp -= 3
                MouseCurrentSpeedToDirection += %Temp%
                Goto EndMouseCurrentSpeedToDirectionCalculation
            }
        }
    }
    EndMouseCurrentSpeedToDirectionCalculation:

    ;MouseRotationAngle convertion to speed of 90 degrees to right
    {
        MouseCurrentSpeedToSide = %MouseRotationAngle%
        MouseCurrentSpeedToSide /= 90.0
        Temp = %MouseCurrentSpeedToSide%
        Transform, Temp, mod, %Temp%, 4

        if Temp >= 0
        {
            if Temp < 1
            {
                MouseCurrentSpeedToSide = 0
                MouseCurrentSpeedToSide += %Temp%
                Goto EndMouseCurrentSpeedToSideCalculation
            }
        }
        if Temp >= 1
        {
            if Temp < 2
            {
                MouseCurrentSpeedToSide = 1
                Temp -= 1
                MouseCurrentSpeedToSide -= %Temp%
                Goto EndMouseCurrentSpeedToSideCalculation
            }
        }
        if Temp >= 2
        {
            if Temp < 3
            {
                MouseCurrentSpeedToSide = 0
                Temp -= 2
                MouseCurrentSpeedToSide -= %Temp%
                Goto EndMouseCurrentSpeedToSideCalculation
            }
        }
        if Temp >= 3
        {
            if Temp < 4
            {
                MouseCurrentSpeedToSide = -1
                Temp -= 3
                MouseCurrentSpeedToSide += %Temp%
                Goto EndMouseCurrentSpeedToSideCalculation
            }
        }
    }
    EndMouseCurrentSpeedToSideCalculation:

    MouseCurrentSpeedToDirection *= %MouseCurrentSpeed%
    MouseCurrentSpeedToSide *= %MouseCurrentSpeed%

    Temp = %MouseRotationAnglePart%
    Transform, Temp, Mod, %Temp%, 2

    If Button = k
    {
        if NumPrefix is number
        {
            Percent := NumPrefix , Percent += 0 ; convert to number
            Offset := Ceil((Percent * A_ScreenHeight) / 100)
            MouseGetPos, xpos, ypos
            MouseMove, xpos, ypos - Offset, 0
            ToolTip, Moved %Percent%`% (%Offset% pixels)
            SetTimer, RemoveToolTip, 1000
            NumPrefix := ""
            Button := ""
        }
        else
        {
            if Temp = 1
            {
                MouseCurrentSpeedToSide *= 2
                MouseCurrentSpeedToDirection *= 2
            }
            MouseCurrentSpeedToDirection *= -1
            MouseMove, %MouseCurrentSpeedToSide%, %MouseCurrentSpeedToDirection%, 1, R
        }
    }
    else if Button = j
    {
        if NumPrefix is number
        {
            Percent := NumPrefix , Percent += 0 ; convert to number
            Offset := Ceil((Percent * A_ScreenHeight) / 100)
            MouseGetPos, xpos, ypos
            MouseMove, xpos, ypos + Offset, 0
            ToolTip, Moved %Percent%`% (%Offset% pixels)
            SetTimer, RemoveToolTip, 1000
            NumPrefix := ""
            Button := ""
        }
        else
        {
            if Temp = 1
            {
                MouseCurrentSpeedToSide *= 2
                MouseCurrentSpeedToDirection *= 2
            }
            MouseCurrentSpeedToSide *= -1
            MouseMove, %MouseCurrentSpeedToSide%, %MouseCurrentSpeedToDirection%, 0, R
        }
    }
    ;else if Button = NumPadLeft
    else if Button = h
    {
        if NumPrefix is number
        {
            Percent := NumPrefix , Percent += 0 ; convert to number
            Offset := Ceil((Percent * A_ScreenWidth) / 100)
            MouseGetPos, xpos, ypos
            MouseMove, xpos - Offset, ypos, 0
            ToolTip, Moved %Percent%`% (%Offset% pixels)
            SetTimer, RemoveToolTip, 1000
            NumPrefix := ""
            Button := ""
        }
        else
        {
            if Temp = 1
            {
                MouseCurrentSpeedToSide *= 2
                MouseCurrentSpeedToDirection *= 2
            }
            MouseCurrentSpeedToSide *= -1
            MouseCurrentSpeedToDirection *= -1
            MouseMove, %MouseCurrentSpeedToDirection%, %MouseCurrentSpeedToSide%, 0, R
        }
    }
    else if Button = l
    {
        if NumPrefix is number
        {
            Percent := NumPrefix , Percent += 0 ; convert to number
            Offset := Ceil((Percent * A_ScreenWidth) / 100)
            MouseGetPos, xpos, ypos
            MouseMove, xpos + Offset, ypos, 0
            ToolTip, Moved %Percent%`% (%Offset% pixels)
            SetTimer, RemoveToolTip, 1000
            NumPrefix := ""
            Button := ""
        }
        else
        {
            if Temp = 1
            {
                MouseCurrentSpeedToSide *= 2
                MouseCurrentSpeedToDirection *= 2
            }
            MouseMove, %MouseCurrentSpeedToDirection%, %MouseCurrentSpeedToSide%, 0, R
        }
    }
    else if Button = u
    {
        if NumPrefix is number
        {
            Percent := NumPrefix , Percent += 0 ; convert to number
            if %Percent% = 0
                Percent := 100
            Offset := Ceil((Percent * A_ScreenWidth) / 100)
            MouseGetPos, xpos, ypos
            MouseMove, xpos - Offset, ypos - Offset, 0
            ToolTip, Moved %Percent%`% (%Offset% pixels)
            SetTimer, RemoveToolTip, 1000
            NumPrefix := ""
            Button := ""
        }
        else
        {
            Temp = %MouseCurrentSpeedToDirection%
            Temp -= %MouseCurrentSpeedToSide%
            Temp *= -1
            Temp2 = %MouseCurrentSpeedToDirection%
            Temp2 += %MouseCurrentSpeedToSide%
            Temp2 *= -1
            MouseMove, %Temp%, %Temp2%, 0, R
        }
    }
    else if Button = o
    {
        if NumPrefix is number
        {
            Percent := NumPrefix , Percent += 0 ; convert to number
            Offset := Ceil((Percent * A_ScreenWidth) / 100)
            MouseGetPos, xpos, ypos
            MouseMove, xpos + Offset, ypos - Offset, 0
            ToolTip, Moved %Percent%`% (%Offset% pixels)
            SetTimer, RemoveToolTip, 1000
            NumPrefix := ""
            Button := ""
        }
        else
        {
            Temp = %MouseCurrentSpeedToDirection%
            Temp += %MouseCurrentSpeedToSide%
            Temp2 = %MouseCurrentSpeedToDirection%
            Temp2 -= %MouseCurrentSpeedToSide%
            Temp2 *= -1
            MouseMove, %Temp%, %Temp2%, 0, R
        }
    }
    else if Button = n
    {
        if NumPrefix is number
        {
            Percent := NumPrefix , Percent += 0 ; convert to number
            Offset := Ceil((Percent * A_ScreenWidth) / 100)
            MouseGetPos, xpos, ypos
            MouseMove, xpos - Offset, ypos + Offset, 0
            ToolTip, Moved %Percent%`% (%Offset% pixels)
            SetTimer, RemoveToolTip, 1000
            NumPrefix := ""
            Button := ""
        }
        else
        {
            Temp = %MouseCurrentSpeedToDirection%
            Temp += %MouseCurrentSpeedToSide%
            Temp *= -1
            Temp2 = %MouseCurrentSpeedToDirection%
            Temp2 -= %MouseCurrentSpeedToSide%
            MouseMove, %Temp%, %Temp2%, 0, R
        }
    }
    else if Button = .
    {
        if NumPrefix is number
        {
            Percent := NumPrefix , Percent += 0 ; convert to number
            if %Percent% = 0
                Percent := 100
            Offset := Ceil((Percent * A_ScreenWidth) / 100)
            MouseGetPos, xpos, ypos
            MouseMove, xpos + Offset, ypos + Offset, 0
            ToolTip, Moved %Percent%`% (%Offset% pixels)
            SetTimer, RemoveToolTip, 1000
            NumPrefix := ""
            Button := ""
        }
        else
        {
            Temp = %MouseCurrentSpeedToDirection%
            Temp -= %MouseCurrentSpeedToSide%
            Temp2 *= -1
            Temp2 = %MouseCurrentSpeedToDirection%
            Temp2 += %MouseCurrentSpeedToSide%
            MouseMove, %Temp%, %Temp2%, 0, R
        }
    }

    SetTimer, ButtonAccelerationEnd, 10
return

ButtonAccelerationEnd:
    GetKeyState, kstate, %Button%, P
    if kstate = D
        Goto ButtonAccelerationStart

    SetTimer, ButtonAccelerationEnd, off
    MouseCurrentAccelerationSpeed = 0
    MouseCurrentSpeed = %MouseSpeed%
    Button = 0
return

;Mouse wheel movement support

ButtonWheelSpeedUp:
    MouseWheelSpeed+=SpeedIncrement
    RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
    If MouseWheelSpeedMultiplier <= 0
        MouseWheelSpeedMultiplier = 1
    MouseWheelSpeedReal = %MouseWheelSpeed%
    MouseWheelSpeedReal *= %MouseWheelSpeedMultiplier%
    ToolTip, Mouse wheel speed: %MouseWheelSpeedReal% lines
    SetTimer, RemoveToolTip, 1000
return

ButtonWheelSpeedDown:
    RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
    If MouseWheelSpeedMultiplier <= 0
        MouseWheelSpeedMultiplier = 1
    MouseWheelSpeedReal = 1
    If MouseWheelSpeedReal > %MouseWheelSpeedMultiplier%
    {
        MouseWheelSpeed-=SpeedIncrement
        MouseWheelSpeedReal = %MouseWheelSpeed%
        MouseWheelSpeedReal *= %MouseWheelSpeedMultiplier%
    }
    If MouseWheelSpeedReal = 1
        ToolTip, Mouse wheel speed: %MouseWheelSpeedReal% line
    else
        ToolTip, Mouse wheel speed: %MouseWheelSpeedReal% lines
    SetTimer, RemoveToolTip, 1000
return

ButtonWheelAccelerationSpeedUp:
    MouseWheelAccelerationSpeed+=SpeedIncrement
    RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
    If MouseWheelSpeedMultiplier <= 0
        MouseWheelSpeedMultiplier = 1
    MouseWheelAccelerationSpeedReal = %MouseWheelAccelerationSpeed%
    MouseWheelAccelerationSpeedReal *= %MouseWheelSpeedMultiplier%
    ToolTip, Mouse wheel acceleration speed: %MouseWheelAccelerationSpeedReal% lines
    SetTimer, RemoveToolTip, 1000
return

ButtonWheelAccelerationSpeedDown:
    RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
    If MouseWheelSpeedMultiplier <= 0
        MouseWheelSpeedMultiplier = 1
    MouseWheelAccelerationSpeedReal = 1
    If MouseWheelAccelerationSpeed > 1
    {
        MouseWheelAccelerationSpeed-=SpeedIncrement
        MouseWheelAccelerationSpeedReal = %MouseWheelAccelerationSpeed%
        MouseWheelAccelerationSpeedReal *= %MouseWheelSpeedMultiplier%
    }
    If MouseWheelAccelerationSpeedReal = 1
        ToolTip, Mouse wheel acceleration speed: %MouseWheelAccelerationSpeedReal% line
    else
        ToolTip, Mouse wheel acceleration speed: %MouseWheelAccelerationSpeedReal% lines
    SetTimer, RemoveToolTip, 1000
return

ButtonWheelMaxSpeedUp:
    MouseWheelMaxSpeed+=SpeedIncrement
    RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
    If MouseWheelSpeedMultiplier <= 0
        MouseWheelSpeedMultiplier = 1
    MouseWheelMaxSpeedReal = %MouseWheelMaxSpeed%
    MouseWheelMaxSpeedReal *= %MouseWheelSpeedMultiplier%
    ToolTip, Mouse wheel maximum speed: %MouseWheelMaxSpeedReal% lines
    SetTimer, RemoveToolTip, 1000
return

ButtonWheelMaxSpeedDown:
    RegRead, MouseWheelSpeedMultiplier, HKCU, Control Panel\Desktop, WheelScrollLines
    If MouseWheelSpeedMultiplier <= 0
        MouseWheelSpeedMultiplier = 1
    MouseWheelMaxSpeedReal = 1
    If MouseWheelMaxSpeed > 1
    {
        MouseWheelMaxSpeed-=SpeedIncrement
        MouseWheelMaxSpeedReal = %MouseWheelMaxSpeed%
        MouseWheelMaxSpeedReal *= %MouseWheelSpeedMultiplier%
    }
    If MouseWheelMaxSpeedReal = 1
        ToolTip, Mouse wheel maximum speed: %MouseWheelMaxSpeedReal% line
    else
        ToolTip, Mouse wheel maximum speed: %MouseWheelMaxSpeedReal% lines
    SetTimer, RemoveToolTip, 1000
return

ButtonWheelUp:
ButtonWheelDown:

If Button <> 0
{
   If Button <> %A_ThisHotkey%
   {
      MouseWheelCurrentAccelerationSpeed = 0
      MouseWheelCurrentSpeed = %MouseWheelSpeed%
   }
}
StringReplace, Button, A_ThisHotkey, *

ButtonWheelAccelerationStart:
    If MouseWheelAccelerationSpeed >= 1
    {
        If MouseWheelMaxSpeed > %MouseWheelCurrentSpeed%
        {
            Temp = 0.001
            Temp *= %MouseWheelAccelerationSpeed%
            MouseWheelCurrentAccelerationSpeed += %Temp%
            MouseWheelCurrentSpeed += %MouseWheelCurrentAccelerationSpeed%
        }
    }

    If Button = i
        MouseClick, wheelup,,, %MouseWheelCurrentSpeed%, 0, D
    else if Button = m
        MouseClick, wheeldown,,, %MouseWheelCurrentSpeed%, 0, D

    SetTimer, ButtonWheelAccelerationEnd, 100
return

ButtonWheelAccelerationEnd:
    GetKeyState, kstate, %Button%, P
    if kstate = D
        Goto ButtonWheelAccelerationStart

    MouseWheelCurrentAccelerationSpeed = 0
    MouseWheelCurrentSpeed = %MouseWheelSpeed%
    Button = 0
    return

    RemoveToolTip:
    SetTimer, RemoveToolTip, Off
    ToolTip
return

SpeedIncrementUp:
    SpeedIncrement++
   ToolTip, Speed increment: %SpeedIncrement% pixels
    SetTimer, RemoveToolTip, 1000
return

SpeedIncrementDown:
    SpeedIncrement--
    if SpeedIncrement < 0
        SpeedIncrement = 0
   ToolTip, Speed increment: %SpeedIncrement% pixels
    SetTimer, RemoveToolTip, 1000
return

Left:
    Send {Left}
return

Down:
    Send {Down}
return

Up:
    Send {Up}
return

Right:
    Send {Right}
return




Report this post
Top
  
Reply with quote  
 Post subject:
PostPosted: April 4th, 2012, 6:23 pm 
Offline

Joined: August 26th, 2004, 3:11 pm
Posts: 80
Location: Chelsea - MA, USA
Can any moderator please delete the last 3 posts from gultron, he already posted those in a separate thread (and they are unrelated to the script).

Anyways, I'm developing version 2 of the script. For those that use this script v1, there will be a couple of changes that might be weird, but end up allowing a greater set of features to be implemented:
- Diagonal keys will now move the mouse wheel (way better than having a separate mode for this).
- NumLock on goes back to being mainly the speed adjustment mode. Also will have options for button/movement lock.
- No more acceleration. Enter might be a 2x speed boost (still thinking on this one).

_________________
Working now on:
NumpadMouse v2 (Draw)
top-recode project (private server script) (pkodev)


Report this post
Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 83 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6

All times are UTC [ DST ]


Who is online

Users browsing this forum: specter333, XX0 and 24 guests


You can post new topics in this forum
You can reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Powered by phpBB® Forum Software © phpBB Group