piusare/mausuHoldo.ahk

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