ฉันจะป้องกันการกดปุ่ม Caps Lock โดยไม่ได้ตั้งใจได้อย่างไรโดยการบังคับให้มีการหน่วงเวลาการรอคอยอย่างน้อยหนึ่งวินาทีขึ้นไป


8

มีวิธี / ยูทิลิตี้ในการเปิดใช้งาน CAPS LOCK เฉพาะหลังจากที่กดปุ่มค้างไว้เป็นเวลาหนึ่งวินาทีหรือมากกว่าเท่านั้น? ฉันไม่ต้องการปิดการใช้งานอย่างสมบูรณ์เพียงป้องกันการเปิดใช้งานฟังก์ชั่นนี้โดยไม่ตั้งใจ

สคริปต์ AutoHotkey สามารถทำสิ่งนี้ได้หรือไม่?


นี่จะขึ้นอยู่กับระบบปฏิบัติการดังนั้นโปรดเพิ่มแท็ก 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 สองบทที่นี่ หากคุณต้องการให้ฉันอธิบายเพิ่มเติมนอกเหนือจากสิ่งที่ฉันแสดงความคิดเห็นในสคริปต์โปรดเพิ่มความคิดเห็นด้านล่าง

คนแรกมีความซับซ้อนมากขึ้นและมีแนวโน้มที่จะล้มเหลว แต่มันส่ง 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
สคริปต์ที่สองทำงานตรงตามที่โฆษณาไว้ ฉันเปลี่ยนตัวแปร "ล่าช้า" เป็น 3000 เพื่อเพิ่มเวลากดลงไปที่ 3 วินาที
Geek

1

google ค้นหาให้ฉันนี้เชื่อมโยงไปยัง http://chuchuva.com/software/capslockdelay/ ครั้งแรกของสามการเชื่อมโยงดาวน์โหลดยังคงทำงาน

ฉันไม่รู้เกี่ยวกับสคริปต์ AutoHotKey อาจเป็น google สำหรับ AutoHotKey และความล่าช้าในการล็อก


4
-1 ไม่ใช่ "ยอดเยี่ยม" คำตอบปัจจุบันเป็นเพียงลิงค์ที่มีชื่อว่า "ลิงก์" และส่วนที่สองคือ "ฉันไม่รู้ลองใช้ google"
Guy บราซิลนั่นคือ

0

ฉันพบอรรถประโยชน์เก่า (เป็น v1.0 ลงวันที่ 2001 มกราคม) เรียกว่า "Toggler" ทำงานได้ดีที่สุดสำหรับฉันแม้ว่าบางครั้งมันจะปิดการใช้งานภายใต้ Windows 10 มันช่วยให้ฉันเพิ่มความล่าช้าในการ CapsLock ด้วยฟังก์ชั่น SmartShift ปลด CapsLock หากกดปุ่ม Shift และตัวอักษร มันมีความสามารถอื่น ๆ อีกมากมายที่ฉันไม่ได้ใช้

หมายเหตุของบรรณาธิการ: ดูเหมือนนักพัฒนาซอฟต์แวร์ Aestas อาจจะไม่อยู่อีกต่อไปและซอฟต์แวร์ดังกล่าวไม่ได้รับการอัพเดตตั้งแต่ปี 2544 อย่างไรก็ตามยังสามารถดาวน์โหลดได้ที่http://download.cnet.com/Toggler /3000-2072_4-10054498.html

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.