273 lines
5.2 KiB
AutoHotkey
273 lines
5.2 KiB
AutoHotkey
;;KBD D events stop execution, so _H it is.
|
|
|
|
Menu, Tray, Tip, Mouse On Keyboard
|
|
|
|
#MaxThreadsPerHotkey 2
|
|
#HotkeyInterval 10000
|
|
#MaxHotkeysPerInterval 9999
|
|
#NoEnv
|
|
#WarnContinuableException Off
|
|
#Persistent
|
|
|
|
;;Retrieving 1st screen's resolution
|
|
SysGet, screenX, 16 ;;"SM_CXFULLSCREEN"
|
|
SysGet, screenY, 17 ;;"SM_CYFULLSCREEN"
|
|
screenXExtraFactor := 1.02
|
|
screenYExtraFactor := 0.10
|
|
|
|
;;DllCall("mouse_event", "UInt", 1, "UInt", (rightMov + lefMov) , "UInt", upMov + downMov )
|
|
;;AHK unaware del futuro de los escritorios.
|
|
;;https://www.autohotkey.com/boards/viewtopic.php?t=97706
|
|
DllCall("SetThreadDpiAwarenessContext", "ptr", -3, "ptr")
|
|
|
|
freqUpdater := DllCall("GetProcAddress", "Ptr" , DllCall("GetModuleHandle", "Str", "kernel32", "Ptr"), "AStr", "QueryPerformanceCounter", "Ptr")
|
|
;;VarSetCapacity(baseTime, 2334423432128)
|
|
;;VarSetCapacity(currentTime, 423523423128)
|
|
|
|
DllCall(freqUpdater, "Int64*" , baseTime)
|
|
DllCall(freqUpdater, "Int64*" , currentTime)
|
|
DllCall("QueryPerformanceFrequency", "Int64*", updateRate)
|
|
updateRate := updateRate / 1000
|
|
currentTime := currentTime ;;/ 1.0
|
|
baseTime := baseTime ;;/ 1.0
|
|
|
|
mouseActive := 0
|
|
|
|
rBtnHold := 0
|
|
mBtnHold := 0
|
|
lBtnHold := 0
|
|
|
|
defaultSpeed := 10
|
|
slowDown := 0
|
|
slowDownFactor := 90
|
|
|
|
test1 := 0
|
|
test2 := 0
|
|
test3 := 0
|
|
test4 := 0
|
|
|
|
pressMouseButton(ByRef mouseButton, ByRef keyPressed, ByRef toggleState := 0, ByRef toggle := 0)
|
|
{
|
|
Global mouseActive
|
|
if(mouseActive == 1)
|
|
{
|
|
if (toggleState == 1)
|
|
{
|
|
MouseClick, %mouseButton%, , , 1, , U
|
|
toggleState := 0
|
|
;;return
|
|
}
|
|
else
|
|
if (toggleState == 0 && toggle == 1)
|
|
{
|
|
MouseClick, %mouseButton%, , , 1, , D
|
|
toggleState := 1
|
|
;;return
|
|
}
|
|
else
|
|
if (toggle == 0)
|
|
{
|
|
MouseClick, %mouseButton%
|
|
;;return
|
|
}
|
|
}
|
|
KeyWait, %keyPressed%
|
|
return
|
|
}
|
|
|
|
share:=CriticalObject({"lefMov" : 0,"rightMov" : 0,"downMov" : 0,"upMov" : 0,"mouseSpeed" : slowDown * slowDownFactor + defaultSpeed})
|
|
|
|
LAlt & RAlt::
|
|
RAlt & LAlt::
|
|
;;<^>!LAlt::
|
|
;;LAlt & RAlt::
|
|
mouseActive := !(mouseActive)
|
|
if (mouseActive == 1)
|
|
{
|
|
mouseThread := AhkThread("
|
|
(
|
|
#Persistent
|
|
Process, Priority, , H
|
|
|
|
DllCall(""SetThreadDpiAwarenessContext"", ""ptr"", -3, ""ptr"")
|
|
|
|
freqUpdater := DllCall(""GetProcAddress"", ""Ptr"" , DllCall(""GetModuleHandle"", ""Str"", ""kernel32"", ""Ptr""), ""AStr"", ""QueryPerformanceCounter"", ""Ptr"")
|
|
;;VarSetCapacity(baseTime, 2334423432128)
|
|
;;VarSetCapacity(currentTime, 423523423128)
|
|
|
|
DllCall(freqUpdater, ""Int64*"" , baseTime)
|
|
DllCall(freqUpdater, ""Int64*"" , currentTime)
|
|
DllCall(""QueryPerformanceFrequency"", ""Int64*"", updateRate)
|
|
ticksPerSecond := 1000
|
|
updateRate := Floor(updateRate / ticksPerSecond)
|
|
currentTime := currentTime ;;/ 1.0
|
|
baseTime := baseTime ;;/ 1.0
|
|
|
|
;;This do be Ugly AF. Probably gonna stay this way.
|
|
obj := CriticalObject(A_Args[1])
|
|
|
|
lefMov := obj.lefMov
|
|
rightMov := obj.rightMov
|
|
downMov := obj.downMov
|
|
upMov := obj.upMov
|
|
mouseSpeed := obj.mouseSpeed
|
|
|
|
delta := 0
|
|
|
|
Loop
|
|
{
|
|
DllCall(freqUpdater, ""Int64*"" , currentTime)
|
|
if (currentTime - baseTime >= updateRate) {
|
|
delta := (currentTime - baseTime) / ticksPerSecond
|
|
MouseMove, (obj.rightMov + obj.lefMov) * (delta / obj.mouseSpeed), (obj.upMov + obj.downMov) * (delta / obj.mouseSpeed), 0, R
|
|
;;DllCall(freqUpdater, ""Int64*"" , baseTime)
|
|
baseTime := currentTime
|
|
}
|
|
}
|
|
|
|
)", &share "")
|
|
}
|
|
else
|
|
{
|
|
mouseThread.ahkTerminate()
|
|
;;ahkthread_free(mouseThread)
|
|
share.lefMov := 0
|
|
test1 := 0
|
|
share.rightMov := 0
|
|
test2 := 0
|
|
share.upMov := 0
|
|
test3 := 0
|
|
share.downMov := 0
|
|
test4 := 0
|
|
lBtnHold := 0
|
|
mBtnHold := 0
|
|
rBtnHold := 0
|
|
;;break
|
|
}
|
|
return
|
|
|
|
#if mouseActive == 1
|
|
|
|
;;Toggle speed
|
|
sc028::
|
|
h::
|
|
Global share
|
|
;;SendInput, {RCtrl Up}
|
|
slowDown := !(slowDown)
|
|
share.mouseSpeed := slowDown * slowDownFactor + defaultSpeed
|
|
;;SendInput, {RCtrl Down}
|
|
return
|
|
|
|
;;Tuck away
|
|
;;TODO: comprobar puntero en local
|
|
;;Targeting 1080p displays with taskbar on top. Should adapt to any single monitor setup.
|
|
sc01A::
|
|
;;y::
|
|
;;DllCall("ShowCursor", "Int", slowDown )
|
|
MouseMove, floor(screenX * screenXExtraFactor), floor(screenY * screenYExtraFactor)
|
|
;;inputCleaning()
|
|
return
|
|
|
|
|
|
$j::
|
|
if (test1 == 0)
|
|
{
|
|
test1 := 1
|
|
share.lefMov := -1
|
|
}
|
|
return
|
|
j Up::
|
|
share.lefMov := 0
|
|
test1 := 0
|
|
return
|
|
|
|
$sc027::
|
|
if (test2 == 0)
|
|
{
|
|
test2 := 1
|
|
share.rightMov := 1
|
|
}
|
|
return
|
|
sc027 Up::
|
|
share.rightMov := 0
|
|
test2 := 0
|
|
return
|
|
|
|
$l::
|
|
if (test3 == 0)
|
|
{
|
|
test3 := 1
|
|
share.upMov := -1
|
|
}
|
|
return
|
|
l Up::
|
|
share.upMov := 0
|
|
test3 := 0
|
|
return
|
|
|
|
$k::
|
|
if (test4 == 0)
|
|
{
|
|
test4 := 1
|
|
share.downMov := 1
|
|
}
|
|
return
|
|
k Up::
|
|
share.downMov := 0
|
|
test4 := 0
|
|
return
|
|
|
|
#MaxThreadsPerHotkey 1
|
|
|
|
$u::
|
|
pressMouseButton("Left", "u", lBtnHold)
|
|
return
|
|
u Up::return
|
|
|
|
$m::
|
|
pressMouseButton("Left", "m", lBtnHold, 1)
|
|
return
|
|
m Up::return
|
|
|
|
$i::
|
|
pressMouseButton("Middle", "i", mBtnHold)
|
|
return
|
|
i Up::return
|
|
|
|
$sc033::
|
|
pressMouseButton("Middle", "sc033", mBtnHold, 1)
|
|
return
|
|
sc033 Up::return
|
|
|
|
$o::
|
|
pressMouseButton("Right", "o", rBtnHold)
|
|
return
|
|
o Up::return
|
|
|
|
$.::
|
|
pressMouseButton("Right", ".", rBtnHold, 1)
|
|
return
|
|
. Up::return
|
|
|
|
$p::
|
|
pressMouseButton("X2", "p")
|
|
return
|
|
p Up::return
|
|
|
|
$sc035::
|
|
pressMouseButton("X1", "sc035")
|
|
return
|
|
sc035 Up::return
|
|
|
|
$n::
|
|
pressMouseButton("WD", "n")
|
|
return
|
|
n Up::return
|
|
|
|
$y::
|
|
pressMouseButton("WU", "y")
|
|
return
|
|
y Up::return
|
|
|
|
#if
|
|
return
|