1 초 이상의 강제 보류 지연을 적용하여 실수로 [Caps Lock] 충돌을 방지하려면 어떻게해야합니까?


8

키를 1 초 이상 누른 후에 만 ​​CAPS LOCK을 활성화하는 방법 / 유틸리티가 있습니까? 완전히 비활성화하고 싶지는 않지만 실수 로이 기능이 활성화되는 것을 방지합니다.

이를 위해 AutoHotkey를 스크립팅 할 수 있습니까?


OS에 따라 다르므로 OS 태그를 추가하십시오.
Richard

1
좋은 기능이 될 것입니다.
Moab

답변:


3

이것은 실제로 AHK 타이머 스크립트로 수행 할 수 있습니다. 이 스크립트는 Caps Lock을 눌렀을 때 등록하고 Capslock Up을 가로 채어 특정 밀리 초가 지난 경우에만 실행되도록합니다. 기본 시간 초과는 0.2 초이며 시스템 트레이에서 구성 할 수 있습니다.

; 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

여기에 두 개의 AHK 스크립트가 있습니다. 스크립트에서 내가 언급 한 것보다 더 설명을하려면 아래에 주석을 추가하십시오.

첫 번째는 더 복잡하고 실패 할 가능성이 있지만 1 초 동안 기다린 후 문자 키 누름으로 CapsLock을 보냅니다.

두 번째는 "Caps Lock"상태를 토글합니다. 지연을 원하는 이유가 다른 프로그램의 CapsLock 핫키에 적합하지 않은 경우 바람직하지 않을 수 있습니다.

Delay두 번째 줄에서 변수를 변경하여 지연을 구성 할 수 있습니다 .


리터럴 "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
}

"Caps Lock"상태를 토글합니다.

; 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
두 번째 스크립트는 광고 된 그대로 작동합니다. 프레스 지연 시간을 3 초로 늘리기 위해 "지연"변수를 3000으로 변경했습니다.
Journeyman Geek


0

"토글 러"라는 오래된 유틸리티 (2001 년 1 월 1 일자 v1.0)가 Windows 10에서 때때로 비활성화되는 것처럼 보이지만 가장 잘 작동합니다. SmartShift 기능을 사용하여 CapsLock에 지연을 추가 할 수 있습니다. Shift 키와 문자를 누르면 CapsLock을 해제합니다. 내가 사용하지 않는 다른 많은 기능이 있습니다.

편집자 주 : 개발자 인 Aestas Software가 더 이상 사용되지 않는 것처럼 보이며 2001 년 이후 소프트웨어가 업데이트되지 않은 것으로 보입니다. 그러나 여전히 http://download.cnet.com/Toggler 에서 다운로드 할 수 있습니다. /3000-2072_4-10054498.html

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.