Question Comment puis-je empêcher les hits accidentels [Caps Lock], en imposant un délai de conservation obligatoire d'une seconde ou plus?


Y a-t-il un moyen / utilitaire d'activer le verrouillage des majuscules seulement après que la clé ait été maintenue enfoncée pendant une seconde ou plus? Je ne veux pas le désactiver complètement, il suffit d'empêcher l'activation accidentelle de cette fonction.

Est-ce que AutoHotkey peut être scripté pour faire cela?


8
2018-02-18 09:37


origine


Cela dépendra du système d'exploitation, veuillez donc ajouter une balise OS. - Richard
Ce serait une fonctionnalité intéressante. - Moab


Réponses:


Cela peut en effet être fait avec un script de temporisation AHK. Ce script sera enregistré lorsque le verrouillage des majuscules est appuyé et intercepté Capslock Up, lui permettant de se déclencher uniquement si un certain nombre de millisecondes est passé. Le délai d'attente par défaut est de 0,2 seconde, cela 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
2018-03-26 10:33





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.

Le premier est plus complexe et probablement sujet à une défaillance, mais il envoie CapsLock comme une pression littérale après une seconde de maintien.

Le second bascule l'état de "Caps Lock", ce qui peut ne pas être souhaitable si la raison pour laquelle vous voulez le délai est pour le raccourci clavier CapsLock d'un autre programme.

Vous pouvez configurer le délai en modifiant le Delay variable dans 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
}

Active / désactive l'état "Verrouillage majuscule":

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

3
2018-03-26 10:39



Le deuxième script fonctionne exactement comme annoncé. J'ai modifié la variable "delay" à 3000 pour augmenter le temps de compression à 3 secondes. - Journeyman Geek♦


Une recherche google m'a donné ce lien vers http://chuchuva.com/software/capslockdelay/. le premier des trois liens de téléchargement fonctionne encore.

Je ne connais pas le script AutoHotKey. Peut-être google pour AutoHotKey et caplock delay.


1
2018-02-18 11:06



-1 Pas "génial". La réponse actuelle est juste un lien intitulé "lien", et la deuxième partie est "Je ne sais pas, essayez google". - That Brazilian Guy


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

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


0
2018-03-19 04:28