piusare/piusareLED.ahk
2023-01-12 22:02:39 +01:00

523 lines
No EOL
10 KiB
AutoHotkey

#SingleInstance
scrLkLed := 0
numLkLed := 0
capLkLed := 0
KeyboardLED(LEDvalue, Cmd, Kbd=0)
{
global scrLkLed, numLkLed, capLkLed
SetUnicodeStr(fn,"\Device\KeyBoardClass" Kbd)
h_device:=NtCreateFile(fn,0+0x00000100+0x00000080+0x00100000,1,1,0x00000040+0x00000020,0)
If Cmd= switch ;switches every LED according to LEDvalue
{
scrLkToggle:=(1<<0)
numlkToggle:=(1<<1)
capLkToggle:=(1<<2)
newState:=0
;curState:= (GetKeyState("ScrollLock", "T")) + 2*(GetKeyState("NumLock", "T")) + 4*(GetKeyState("CapsLock", "T"))
if (LEDvalue & scrLkToggle) {
newState += !(scrLkLed)
scrLkLed := !(scrLkLed)
;MsgBox % newState . " scr " . scrLkLed
}
else newState += (scrLkLed)
if (LEDvalue & numLkToggle)
newState += 2*(!(GetKeyState("NumLock", "T")))
else newState += 2*((GetKeyState("NumLock", "T")))
if (LEDvalue & capLkToggle)
newState += 4*(!(GetKeyState("CapsLock", "T")))
else newState += 4*((GetKeyState("CapsLock", "T")))
;MsgBox % newState
KeyLED:=newState
}
If Cmd= on ;forces all choosen LED's to ON (LEDvalue= 0 ->LED's according to keystate)
KeyLED:= LEDvalue | (GetKeyState("ScrollLock", "T") + 2*GetKeyState("NumLock", "T") + 4*GetKeyState("CapsLock", "T"))
If Cmd= off ;forces all choosen LED's to OFF (LEDvalue= 0 ->LED's according to keystate)
{
LEDvalue:= LEDvalue ^ 7
KeyLED:= LEDvalue & (GetKeyState("ScrollLock", "T") + 2*GetKeyState("NumLock", "T") + 4*GetKeyState("CapsLock", "T"))
}
success := DllCall( "DeviceIoControl"
, "ptr", h_device
, "uint", CTL_CODE( 0x0000000b ; FILE_DEVICE_KEYBOARD
, 2
, 0 ; METHOD_BUFFERED
, 0 ) ; FILE_ANY_ACCESS
, "int*", KeyLED << 16
, "uint", 4
, "ptr", 0
, "uint", 0
, "ptr*", output_actual
, "ptr", 0 )
NtCloseFile(h_device)
return success
}
CTL_CODE( p_device_type, p_function, p_method, p_access )
{
Return, ( p_device_type << 16 ) | ( p_access << 14 ) | ( p_function << 2 ) | p_method
}
NtCreateFile(ByRef wfilename,desiredaccess,sharemode,createdist,flags,fattribs)
{
VarSetCapacity(objattrib,6*A_PtrSize,0)
VarSetCapacity(io,2*A_PtrSize,0)
VarSetCapacity(pus,2*A_PtrSize)
DllCall("ntdll\RtlInitUnicodeString","ptr",&pus,"ptr",&wfilename)
NumPut(6*A_PtrSize,objattrib,0)
NumPut(&pus,objattrib,2*A_PtrSize)
status:=DllCall("ntdll\ZwCreateFile","ptr*",fh,"UInt",desiredaccess,"ptr",&objattrib
,"ptr",&io,"ptr",0,"UInt",fattribs,"UInt",sharemode,"UInt",createdist
,"UInt",flags,"ptr",0,"UInt",0, "UInt")
return % fh
}
NtCloseFile(handle)
{
return DllCall("ntdll\ZwClose","ptr",handle)
}
SetUnicodeStr(ByRef out, str_)
{
VarSetCapacity(out,2*StrPut(str_,"utf-16"))
StrPut(str_,&out,"utf-16")
}
caps_lock_state := false
test_fn := Func("KeyboardLED").bind(1, "switch", 0)
*CapsLock::
Global test_fn
caps_lock_state := !(caps_lock_state)
if (caps_lock_state) {
SetTimer, % test_fn, 200
KeyboardLED(1,"on",0)
} else {
SetTimer, % test_fn, Off
KeyboardLED(1,"off",0)
}
("CapsLock")
return
/*r::
MsgBox % "SI" . caps_lock_state . "e"
return
GUIA:
H,J,K,L-LEFT, DOWN, UP, RIGHT
P,O-PGUP, PGDN
I,U-ctrl+X, ctrl+C
Ñ-ctrl+V
M-F2
,-F8
N-ctrl+Z
Y-ctrl+Y
E-S
D-ESC
C-F && H WHEN CTRL+SHIFT
F-CTRL
S-SHIFT
8::KeyboardLED(1,"switch",0)
7::
MsgBox % "var " . scrLkLed
return
*/
LShift & RShift::CapsLock
RShift & LShift::CapsLock
;*CapsLock::return
#if caps_lock_state
f::return
X::return
s::return
a::return
h::
ctrlState := GetKeyState("F", "P")
shiftState := GetKeyState("s", "P")
altState := GetKeyState("a","P")
if ctrlState = 1
SendInput {Ctrl Down}
if shiftState = 1
SendInput {Shift Down}
if altState = 1
SendInput {Alt Down}
SendInput {Left}
if ctrlState = 1
SendInput {Ctrl Up}
if shiftState = 1
SendInput {Shift Up}
if altState = 1
SendInput {Alt Up}
return
j::
ctrlState := GetKeyState("F", "P")
shiftState := GetKeyState("s", "P")
altState := GetKeyState("a","P")
if ctrlState = 1
SendInput {Ctrl Down}
if shiftState = 1
SendInput {Shift Down}
if altState = 1
SendInput {Alt Down}
SendInput {Down}
if ctrlState = 1
SendInput {Ctrl Up}
if shiftState = 1
SendInput {Shift Up}
if altState = 1
SendInput {Alt Up}
return
l::
ctrlState := GetKeyState("F", "P")
shiftState := GetKeyState("s", "P")
altState := GetKeyState("a","P")
if ctrlState = 1
SendInput {Ctrl Down}
if shiftState = 1
SendInput {Shift Down}
if altState = 1
SendInput {Alt Down}
SendInput {Right}
if ctrlState = 1
SendInput {Ctrl Up}
if shiftState = 1
SendInput {Shift Up}
if altState = 1
SendInput {Alt Up}
return
k::
ctrlState := GetKeyState("F", "P")
shiftState := GetKeyState("s", "P")
altState := GetKeyState("a","P")
if ctrlState = 1
SendInput {Ctrl Down}
if shiftState = 1
SendInput {Shift Down}
if altState = 1
SendInput {Alt Down}
SendInput {Up}
if ctrlState = 1
SendInput {Ctrl Up}
if shiftState = 1
SendInput {Shift Up}
if altState = 1
SendInput {Alt Up}
return
m::
("m")
loop {
ctrlState := GetKeyState("f", "P")
shiftState := GetKeyState("s", "P")
switch (shiftState + ctrlState) {
case 0:
SendInput {F2}
return
case 1:
SendInput, % ((shiftState == 1) ? ("+{F2}") : ("^{F2}"))
return
case 2:
SendInput ^+{F2}
return
default:
MsgBox % "menudo gilipolls"
return
}
return
}
p::
("p")
loop {
ctrlState := GetKeyState("f", "P")
shiftState := GetKeyState("s", "P")
switch (shiftState + ctrlState) {
case 0:
SendInput {PgDn}
return
case 1:
SendInput, % ((shiftState == 1) ? ("+{PgDn}") : ("^{PgDn}"))
return
case 2:
SendInput ^+{PgDn}
return
default:
MsgBox % "menudo gilipolls"
return
}
return
}
return
o::
("o")
loop {
ctrlState := GetKeyState("f", "P")
shiftState := GetKeyState("s", "P")
switch (shiftState + ctrlState) {
case 0:
SendInput {PgUp}
return
case 1:
SendInput, % ((shiftState == 1) ? ("+{PgUp}") : ("^{PgUp}"))
return
case 2:
SendInput ^+{PgDn}
return
default:
MsgBox % "menudo gilipolls"
return
}
return
}
return
sc027::
("sc027")
SendInput ^{v}
return
i::
("i")
SendInput ^{x}
return
u::
("u")
SendInput ^{c}
return
N::
("N")
SendInput ^{z}
return
Y::
("Y")
SendInput ^{y}
return
sc033::
("sc033")
loop {
ctrlState := GetKeyState("f", "P")
shiftState := GetKeyState("s", "P")
switch (shiftState + ctrlState) {
case 0:
SendInput {F8}
return
case 1:
SendInput, % ((shiftState == 1) ? ("+{F8}") : ("^{F8}"))
return
case 2:
SendInput ^+{F8}
return
default:
MsgBox % "menudo gilipolls"
return
}
return
}
return
C::
("C")
loop {
ctrlState := GetKeyState("f", "P")
shiftState := GetKeyState("s", "P")
switch (shiftState + ctrlState) {
case 0:
SendInput ^{f}
return
case 1:
SendInput, % ((shiftState == 1) ? ("^{F}") : ("^{H}"))
return
case 2:
;SendInput % ("^+{keyboardActions[""c""]}")
return
default:
MsgBox % "menudo gilipolls"
return
}
return
}
return
E::
("E")
shiftState := GetKeyState("s", "P")
SendInput, % ((shiftState == 1) ? ("^{S}") : ("^{s}"))
return
D::
("D")
SendInput {Esc}
return
sc01A::
("sc01A")
loop {
ctrlState := GetKeyState("f", "P")
shiftState := GetKeyState("s", "P")
switch (shiftState + ctrlState) {
case 0:
SendInput {Del}
return
case 1:
SendInput, % ((shiftState == 1) ? ("+{Del}") : ("^{Del}"))
return
case 2:
;SendInput % ("^+{keyboardActions[""c""]}")
SendInput ^+{Del}
return
default:
MsgBox % "menudo gilipolls"
return
}
return
}
return
sc01B::
("sc01B")
loop {
ctrlState := GetKeyState("f", "P")
shiftState := GetKeyState("s", "P")
switch (shiftState + ctrlState) {
case 0:
SendInput {Home}
return
case 1:
SendInput, % ((shiftState == 1) ? ("+{Home}") : ("^{Home}"))
return
case 2:
;SendInput % ("^+{keyboardActions[""c""]}")
SendInput ^+{Home}
return
default:
MsgBox % "menudo gilipolls"
return
}
return
}
return
sc02B::
("sc02B")
loop {
ctrlState := GetKeyState("f", "P")
shiftState := GetKeyState("s", "P")
switch (shiftState + ctrlState) {
case 0:
SendInput {End}
return
case 1:
SendInput, % ((shiftState == 1) ? ("+{End}") : ("^{End}"))
return
case 2:
;SendInput % ("^+{keyboardActions[""c""]}")
SendInput ^+{End}
return
default:
MsgBox % "menudo gilipolls"
return
}
return
}
return
sc028::
("sc028")
loop {
ctrlState := GetKeyState("f", "P")
shiftState := GetKeyState("s", "P")
switch (shiftState + ctrlState) {
case 0:
SendInput {Ins}
return
case 1:
SendInput, % ((shiftState == 1) ? ("+{Ins}") : ("^{Ins}"))
return
case 2:
;SendInput % ("^+{keyboardActions[""c""]}")
SendInput ^+{Ins}
return
default:
MsgBox % "menudo gilipolls"
return
}
return
}
return
Backspace::
("Backspace")
loop {
ctrlState := GetKeyState("f", "P")
shiftState := GetKeyState("s", "P")
switch (shiftState + ctrlState) {
case 0:
SendInput {Backspace}
return
case 1:
SendInput, % ((shiftState == 1) ? ("+{Backspace}") : ("^{Backspace}"))
return
case 2:
;SendInput % ("^+{keyboardActions[""c""]}")
SendInput ^+{Backspace}
return
default:
MsgBox % "menudo gilipolls"
return
}
return
}
return
#if