Comment puis-je empêcher les hits accidentels de [Verrouillage des majuscules] en imposant un délai d'attente obligatoire d'une seconde ou plus?


8

Existe-t-il un moyen / utilitaire d'activer le VERR MAJ uniquement après avoir maintenu la touche enfoncée pendant une seconde ou plus? Je ne veux pas le désactiver complètement, juste empêcher l'activation accidentelle de cette fonction.

AutoHotkey peut-il être scripté pour ce faire?


Cela dépendra du système d'exploitation, veuillez donc ajouter une balise du système d'exploitation.
Richard

1
Ce serait une fonctionnalité intéressante.
Moab

Réponses:


3

Cela peut en effet se faire avec un timer-script AHK. Ce script s'enregistre lorsque le verrouillage des majuscules est enfoncé et intercepte le verrouillage des majuscules , lui permettant de se déclencher uniquement si un certain nombre de millisecondes s'est écoulé. Le délai d'expiration par défaut est de 0,2 s, il peut être configuré dans la barre d'état système.

; 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

J'ai deux scripts AHK ici. Si vous voulez que j'explique plus que ce que j'ai commenté dans les scripts, veuillez ajouter un commentaire ci-dessous.

La première est plus complexe et probablement sujette à l'échec, mais elle envoie CapsLock comme une touche littérale après avoir maintenu pendant une seconde.

Le second bascule l'état de "Verrouillage des majuscules", ce qui peut ne pas être souhaitable si la raison pour laquelle vous voulez que le retard soit pour le raccourci clavier CapsLock d'un autre programme.

Vous pouvez configurer le retard en modifiant la Delayvariable sur la deuxième ligne.


Envoie une touche littérale "CapsLock"

; 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
}

Bascule l'état "Verrouillage des majuscules":

; 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
Le deuxième script fonctionne exactement comme annoncé. J'ai modifié la variable "délai" à 3000 pour augmenter le temps de compression à 3 secondes.
Journeyman Geek


0

Je trouve qu'un ancien utilitaire (il s'agit de la v1.0, datée de janvier 2001) appelé "Toggler" fonctionne mieux pour moi, bien qu'il semble parfois être désactivé sous Windows 10. Il me permet d'ajouter un délai à CapsLock avec une fonction SmartShift pour désactivez le verrouillage des majuscules si vous appuyez sur la touche Maj et sur une lettre. Il a de nombreuses autres capacités que je n'utilise pas.

Note de l'éditeur: il semble que le développeur, Aestas Software, n'existe plus, et le logiciel ne semble pas avoir été mis à jour depuis 2001. Cependant, il est toujours téléchargeable sur http://download.cnet.com/Toggler /3000-2072_4-10054498.html

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.