Ctrl押しっぱなし問題

バグ修正

  • Ctrlキーの押下が解除されない

この件、AutohotKey界隈ではよく知られた現象らしく、Ctrlキー以外にも修飾キー全般で押しっぱなしになる不具合が発生する模様。

ググると沢山情報が出てくる。

  • AutoHotkey:キー押しっぱなし病・ホットキーすり抜け病対策の研究
  • AutoHotkeyの押しっぱなし問題
  • 快適キーボード操作のためのキーカスタマイズ 〜AutoHotKeyのキー押しっぱなし問題とScrollLockの非推奨~
  • 【AutoHotkey】キーが押しっぱなしになる現象の対策メモ(2024年6月最新版)
  • AutoHotkeyでShiftの単押しと修飾キーとしての押しっぱなしを別のキーマップにする
  • AutoHotkeyを始めるなら最初にこれを書いておこう

・・・

機能修正

SendMode "Event"

; 不具合対処
; 稀に修飾キーが押下した状態のままになる現象が発生する。
; ホットキー終了時に必ずCtrl/Altキーを上げる。
sendWrap(key)
{
    try
        Send key
    finally
        Send "{Ctrl Up}"
}
setWindowPositionWrap(windowPosition, monitorNum*)
{
    try
        if (monitorNum.Length > 0)
            setWindowPosition(windowPosition, monitorNum[1])
        else
            setWindowPosition(windowPosition)
    finally
        Send "{Alt Up}"
}
^!r:: {
    Send "{Ctrl Down}"
    Send "{Ctrl Up}"
    Send "{Alt Down}"
    Send "{Alt Up}"
    Reload
}

現象がまったく出なくなるような対処方法はないようだけど、SendをSendEventに変更したら発生頻度が下がったとの情報があったので「SendMode “Event”」の1行を追加した。

また、send/setWindowPosition関数をWrapしてホットキーの終了時に無条件でCtrl/AltのUpイベントを発行するように修正した。無条件でUpイベントが発生することによる副作用が懸念されるけれど押しっぱなしになるよりは良いかと思われる。

暫定対処で追加したCtrl+Alt+Rキーの処理は残してAltキーの対処も追加しておいた。

これでも再発するならsleepを入れたり、修飾キーをF13~F14キーに割り当てたり、別の方法で試行錯誤しながら修正していくことになる。

しばらく様子見です。

作ったもの

keyremap_20241222.zip


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です