Làm cách nào để ngăn chặn các lần truy cập vô tình [Caps Lock], bằng cách thực thi độ trễ giữ bắt buộc từ giây trở lên?


8

Có cách nào / tiện ích để kích hoạt CAPS LOCK chỉ sau khi khóa được giữ trong một giây trở lên không? Tôi không muốn vô hiệu hóa nó hoàn toàn, chỉ ngăn chặn việc kích hoạt ngẫu nhiên chức năng này.

AutoHotkey có thể được viết kịch bản để làm điều này không?


Điều này sẽ phụ thuộc vào hệ điều hành, vì vậy vui lòng thêm thẻ hệ điều hành.
Richard

1
Đó sẽ là một tính năng tốt đẹp.
Moab

Câu trả lời:


3

Điều này thực sự có thể được thực hiện với một tập lệnh hẹn giờ AHK. Tập lệnh này sẽ đăng ký khi Caps Lock được nhấn và chặn Capslock Up , cho phép nó chỉ bắn khi một số mili giây nhất định đã qua. Thời gian chờ mặc định là 0,2 giây, điều này có thể được cấu hình trong khay hệ thống.

; 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

Tôi đã có hai tập lệnh AHK ở đây. Nếu bạn muốn tôi giải thích rõ hơn những gì tôi đã nhận xét trong các kịch bản, vui lòng thêm một nhận xét bên dưới.

Cái đầu tiên phức tạp hơn và có thể dễ bị lỗi, nhưng nó sẽ gửi CapsLock dưới dạng một phím bấm theo nghĩa đen sau khi giữ một giây.

Cái thứ hai bật tắt trạng thái "Caps Lock", điều này có thể không được mong muốn nếu lý do bạn muốn trì hoãn là cho một số phím nóng CapsLock của chương trình khác.

Bạn có thể định cấu hình độ trễ bằng cách thay đổi Delaybiến trong dòng thứ hai.


Gửi một phím bấm "CapsLock" theo nghĩa đen

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

Trạng thái "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
Kịch bản thứ hai hoạt động chính xác như quảng cáo. Tôi đã thay đổi biến "độ trễ" thành 3000 để tăng thời gian nhấn xuống 3 giây.
Journeyman Geek

1

Một tìm kiếm google đã cho tôi liên kết này đến http://chuchuva.com/software/capslockdelay/ . Liên kết đầu tiên trong ba liên kết tải xuống vẫn hoạt động.

Tôi không biết về tập lệnh AutoHotKey. Có thể google cho AutoHotKey và độ trễ caplock.


4
-1 Không "tuyệt vời". Câu trả lời hiện tại chỉ là một liên kết được gắn nhãn là "liên kết" và phần thứ hai là "Tôi không biết, hãy thử google".
Chàng trai người Brazil

0

Tôi tìm thấy một tiện ích cũ (đó là v1.0, ngày 1 tháng 1 năm 2001) có tên là "Toggler" hoạt động tốt nhất với tôi, mặc dù đôi khi nó dường như bị vô hiệu hóa trong Windows 10. Nó cho phép tôi thêm độ trễ cho CapsLock với chức năng SmartShift để bỏ đặt CapsLock nếu nhấn phím Shift và chữ cái. Nó có nhiều khả năng khác mà tôi không sử dụng.

Lưu ý của biên tập viên: Có vẻ như nhà phát triển, Aestas Software, có thể không còn nữa và phần mềm dường như không được cập nhật kể từ năm 2001. Tuy nhiên, nó vẫn có thể tải xuống tại http://doad.cnet.com/Toggler /3000-2072_4-10054498.html

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.