Wie verhindere ich versehentliche [Feststelltaste], indem ich eine obligatorische Halteverzögerung von einer Sekunde oder mehr erzwinge?


8

Gibt es eine Möglichkeit / ein Dienstprogramm, um CAPS LOCK erst zu aktivieren, nachdem die Taste eine Sekunde oder länger gedrückt gehalten wurde? Ich möchte es nicht vollständig deaktivieren, sondern nur eine versehentliche Aktivierung dieser Funktion verhindern.

Kann AutoHotkey dafür mit Skripten versehen werden?


Dies ist vom Betriebssystem abhängig. Fügen Sie daher ein Betriebssystem-Tag hinzu.
Richard

1
Das wäre eine schöne Funktion.
Moab

Antworten:


3

Dies kann in der Tat mit einem AHK-Timer-Skript erfolgen. Dieses Skript registriert sich, wenn die Feststelltaste gedrückt wird, und fängt die Feststelltaste ab , sodass es nur ausgelöst werden kann , wenn eine bestimmte Anzahl von Millisekunden verstrichen ist. Das Standardzeitlimit beträgt 0,2 Sekunden. Dies kann in der Taskleiste konfiguriert werden.

; AutoHotKey - Suppress CapsLock
; This is a modified version of a scrpt by Lexikos, taken from:
; http://www.autohotkey.com/board/topic/82509-software-fix-for-double-clicking-mouse/

RegRead minDelay, HKCU, Software\LongCapsLock, MinDelay
if ErrorLevel
    minDelay := 200  ; Default setting.

#NoTrayIcon  ; Hide initial icon.
Menu Tray, Icon, %A_WinDir%\System32\main.cpl  ; Set icon.
Menu Tray, Icon  ; Show icon.
Menu Tray, NoStandard
Menu Tray, Add, &Configure, TrayConfigure
Menu Tray, Add, E&xit, TrayExit
Menu Tray, Default, &Configure
Menu Tray, Click, 1  ; Single-click to configure.
Menu Tray, Tip, Long CapsLock

global _starttime
global timing := 0

CapsLock::
if (timing = 0) {
    timing := 1
    _startTime := A_TickCount
}
return

CapsLock Up::
if (timing = 1) {
    _timeDiff := A_TickCount - _startTime
    ;MsgBox  diff: %_timeDiff%
    if (_timeDiff > minDelay) {
        Send {CapsLock down} 
    }
    timing := 0
}
return

TrayConfigure:
prompt := "Enter minimum duration needed to hold Caps Lock`n"
            . "before it is toggled. The unit is milliseconds."
Loop {
    InputBox newMinDelay, Long CapsLock, %prompt%,,,,,,,, %minDelay%
    if ErrorLevel  ; Cancelled?
        return
    if (newMinDelay+0 >= 150 && newMinDelay <= 10000) ; Valid?
        break
    if (A_Index = 1)
        prompt .= "`n`nPlease enter a number between 150 and 10000."
}
minDelay := newMinDelay
if (minDelay = 200)
    RegDelete HKCU, Software\LongCapsLock
else
    RegWrite REG_DWORD, HKCU, Software\LongCapsLock, MinDelay, %minDelay%
return

TrayExit:
ExitApp

3

Ich habe hier zwei AHK-Skripte. Wenn Sie möchten, dass ich weiter erkläre als in den Skripten angegeben, fügen Sie bitte unten einen Kommentar hinzu.

Der erste ist komplexer und wahrscheinlich fehleranfällig, sendet jedoch CapsLock als wörtlichen Tastendruck, nachdem er eine Sekunde lang gedrückt gehalten wurde.

Der zweite schaltet den Status "Feststelltaste" um, was möglicherweise nicht wünschenswert ist, wenn der Grund für die Verzögerung der CapsLock-Hotkey eines anderen Programms ist.

Sie können die Verzögerung konfigurieren, indem Sie die DelayVariable in der zweiten Zeile ändern .


Sendet einen wörtlichen "CapsLock" -Tastendruck

; Time to wait in milliseconds
Delay = 1000

; Variable used to ignore key repeats
; (Windows sends them when a key is held down)...
CapsLockHeld = 0

; This starts the timer on key *down*.
; Time is measured in milliseconds.
; Timer resolution should be approximately 20 ms.
; The negative time means run only once.
; It will reset the timer if it is already running.
CapsLock::CapsLockDown()

; This stops the timer on key *up*.
CapsLock Up::CapsLockUp()

; This sends a CapsLock keypress when the timer runs out.
SendCapsLock:
    SetTimer, SendCapsLock, Off
    HotKey, CapsLock, Off
    HotKey, CapsLock Up, Off
    SendInput, {CapsLock}
    HotKey, CapsLock Up, On
    HotKey, CapsLock, On
Return

; Using functions because otherwise global variables die
CapsLockDown() {
    global CapsLockHeld
    global Delay
    If (CapsLockHeld == 1) {
        Return
    }
    CapsLockHeld = 1
    SetTimer, SendCapsLock, %Delay%
    Return
}

CapsLockUp() {
    global CapsLockHeld
    CapsLockHeld = 0
    SetTimer, SendCapsLock, Off
    Return
}

Schaltet den Status "Feststelltaste" um:

; Time to wait in milliseconds
Delay = 1000

; Variable used to ignore key repeats
; (Windows sends them when a key is held down)...
CapsLockHeld = 0

; This starts the timer on key *down*.
; Time is measured in milliseconds.
; Timer resolution should be approximately 20 ms.
; The negative time means run only once.
; It will reset the timer if it is already running.
CapsLock::CapsLockDown()

; This stops the timer on key *up*.
CapsLock Up::CapsLockUp()

; This sends a CapsLock keypress when the timer runs out.
SendCapsLock:
    SetTimer, SendCapsLock, Off
    If (GetKeyState("CapsLock", "T"))
        SetCapsLockState, Off
    Else
        SetCapsLockState, On
Return

; Using functions because otherwise global variables die
CapsLockDown() {
    global CapsLockHeld
    global Delay
    If (CapsLockHeld == 1) {
        Return
    }
    CapsLockHeld = 1
    SetTimer, SendCapsLock, %Delay%
    Return
}

CapsLockUp() {
    global CapsLockHeld
    CapsLockHeld = 0
    SetTimer, SendCapsLock, Off
    Return
}

1
Das zweite Skript funktioniert genau wie angekündigt. Ich habe die Variable "Verzögerung" auf 3000 geändert, um die Druckzeit auf 3 Sekunden zu erhöhen.
Geselle Geek


0

Ich finde, dass ein altes Dienstprogramm (es ist v1.0 vom Januar 2001) namens "Toggler" am besten für mich funktioniert, obwohl es unter Windows 10 gelegentlich deaktiviert zu sein scheint. Es ermöglicht mir, CapsLock mit einer SmartShift-Funktion eine Verzögerung hinzuzufügen Deaktivieren Sie die Feststelltaste, wenn Sie die Umschalttaste und einen Buchstaben drücken. Es hat viele andere Funktionen, die ich nicht benutze.

Anmerkung des Herausgebers: Es sieht so aus, als ob der Entwickler Aestas Software möglicherweise nicht mehr da ist und die Software seit 2001 nicht mehr aktualisiert wurde. Sie kann jedoch weiterhin unter http://download.cnet.com/Toggler heruntergeladen werden /3000-2072_4-10054498.html

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.