強制的なホールド遅延を1秒以上強制することで、[Caps Lock]の偶発的なヒットを防ぐにはどうすればよいですか?


8

キーを1秒以上押し続けた後にのみCapsLockをアクティブにする方法/ユーティリティはありますか?完全に無効にしたくないので、この機能が誤ってアクティブになるのを防いでください。

AutoHotkeyをスクリプト化してこれを実行できますか?


これはOSに依存するため、OSタグを追加してください。
リチャード

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

ここに2つのAHKスクリプトがあります。スクリプトでコメントした内容よりも詳しく説明したい場合は、下にコメントを追加してください。

最初の方法はより複雑で、おそらく失敗する傾向がありますが、1秒間押し続けた後、CapsLockをリテラルキープレスとして送信します。

2番目は、「Caps Lock」の状態を切り替えます。遅延が必要な理由が他のプログラムのCapsLockホットキーのためである場合、これは望ましくない場合があります。

Delay2行目の変数を変更して、遅延を構成できます。


リテラルの「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
2番目のスクリプトは、宣伝どおりに機能します。「delay」変数を3000に変更して、プレスダウン時間を3秒に増やしました。
ジャーニーマンオタク

1

グーグル検索でhttp://chuchuva.com/software/capslockdelay/へのこのリンクが表示されました3つのダウンロードリンク最初のリンクは引き続き機能します。

AutoHotKeyスクリプトについて知りません。AutoHotKeyとcaplockの遅延のためにグーグルかもしれません。


4
-1「素晴らしい」ではない。現在の答えは「リンク」というラベルの付いたリンクだけで、2番目の部分は「わからない、グーグルを試してみて」です。
そのブラジル人ガイ

0

「Toggler」と呼ばれる古いユーティリティ(v1.0、2001年1月)が最適です。Windows10では無効になっているように見えることがあります。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.