Oh je. Ich habe das Skript getestet und dachte, es ist doch doof, den Status fest zu schreiben. Besser wäre es doch weg und zurück zum aktuellen Status zu schalten.
Laut Hilfe von Send bietet AutoIt das out of the box Allerdings funktioniert es nicht:
Könnt ihr das nachvollziehen? (Hab nicht nach einem Ticket gesucht).
Danach habe ich den Thread gefunden: https://www.autoitscript.com/forum/topic/12…ll-and-numlock/
In folgendem Bsp. Skript sieht es jedenfalls gut aus:
Code
#include <Timers.au3>
Global $g_iIdleMinutes = 3 ; Aktion erfolgt nach [$g_iIdleMinutes] Minuten Inaktivität
HotKeySet("!{END}", "_Exit")
_StartTimer()
While Sleep(50)
WEnd
Func _StartTimer()
Local $hTimer
_Timer_SetTimer($hTimer, 1 * 1000, "_CheckActivity") ; Einmal pro Minuten
EndFunc ;==>_StartTimer
Func _CheckActivity($hWnd, $iMsg, $iIDTimer, $iTime)
If _Timer_GetIdleTime() > 1 * 1000 Then
ConsoleWrite(_Timer_GetIdleTime() & @CRLF)
Local $aStatus = _GetStatus() ; https://www.autoitscript.com/forum/topic/12056-determing-state-of-capslock-scroll-and-numlock/
If @error Then Return ConsoleWrite("Status von ScrollLock konnte nicht ausgelesen werden.")
Send($aStatus[0])
Send($aStatus[1])
EndIf
EndFunc ;==>_CheckActivity
Func _GetStatus()
Local $VK_NUMLOCK = 0x90
Local $VK_SCROLL = 0x91
Local $VK_CAPITAL = 0x14
Local $aStatus = DllCall("user32.dll", "long", "GetKeyState", "long", $VK_SCROLL)
If Not IsArray($aStatus) Then Return SetError(1)
ReDim $aStatus[2]
If $aStatus[0] = 1 Then
$aStatus[0] = "{ScrollLock off}"
$aStatus[1] = "{ScrollLock on}"
Else
$aStatus[0] = "{ScrollLock on}"
$aStatus[1] = "{ScrollLock off}"
EndIf
Return $aStatus
EndFunc ;==>_GetScrollLock
Func _Exit()
Exit
EndFunc ;==>_Exit
Alles anzeigen