Windows11で固定キーオフでもキーが押され続けるバグの解決法
Windows10時代でもそうだったのですが、Shift、Alt、Ctrl、Winの4つの修飾キーは、まれに押されたままになってしまいます。
固定キーをオフにしたりレジストリを書き換えたり、IMEの設定を確認したりしたのですが解決せず。
一時的な対処として、まずは以下のような手法で固定された修飾キーの特定。
・フォルダーをダブルクリックしたらプロパティーが開く→Altキーが固定されている
・矢印キーを押したらウィンドウが端による→Winキーが固定されている
次にその修飾キーを押下すると、とりあえず直ることが多いということがわかりました。
原因としてはOS側でKeyDownイベントのみが呼ばれてKeyUpイベントが呼ばれていないためだろうと推測。
以下MSコミュニティで投稿された事例もこちらのロジクールマウスでも何度かあって、修飾キー押下でとりあえず直してきたので、たぶんKeyUpガァ
Ctrl キーが定期的にロックされ、Ctrl キー押しっぱなしの動作になることがしばしばあります
https://answers.microsoft.com/ja-jp/windows/forum/all/ctrl/a9e6d08c-254c-4732-8f42-7b423569cb72
当方の環境はWin10時代はmacOSの上にParallels Desktopで仮想OSの構築、Win11現在はmacOSからSplashTopでリモートデスクトップ接続、あるいは直接モニターに接続してwin用キーマウと併せて操作をしていますが、いずれもこのバグは発生していたため、特定のソフト/ハードウェアはあまり関係なく起こる事象かと思われます。
悩んだ末に根本の原因はOSレベルのバグなので諦めるとして、対処法はShift、Alt、Ctrl、Winの4つのKeyUpイベントを呼び出すバッチファイルをタスクバーにピン留めしておくのがベストと考えるに至りました。
イベントさえ呼び出せれば言語等は問いませんが、Press(Down+Up)だと場合によってはスタートメニューが開いてしまったり、Altによる意図しないボタンへのフォーカスが発生してしまう可能性があるため、Upイベントのみを手動で発火できるよう今回はPythonとpyautoguiを使うことにしました。
最初にPowershellを管理者権限で開いてScoopでPython、pipでpyautoguiをインストール。
scoop install python && pip install pyautogui
次にmodkeyup.batを作成して以下をコピペ。
ちなみにimport行から上はバッチファイルに直接スクリプトを埋め込むためのWindows版Shebangみたいなイディオムだそうで、StackOverflowに載ってました。
「bat file embed python」とかで英語検索すると出ます。
1>2# : ^ ''' @echo off echo normal echo batch code echo Switch to python python "%~f0" exit /b rem ^ ''' import pyautogui pyautogui.keyUp('alt') pyautogui.keyUp('shift') pyautogui.keyUp('ctrl') pyautogui.keyUp('win')
あとはエクスプローラー上でbatファイルを右クリックして「ショートカットの作成」
出来上がったショートカットを右クリックして「プロパティ」→「詳細設定」→「管理者として実行」にチェック
同じくプロパティ画面の「リンク先」の先頭に
cmd /c
を追加して適用するとアイコンがコンソール風になり、無事に右クリックでタスクバーに格納できるようになります。
普段の作業をしていて、修飾キーが押しっぱなしになっていると思ったら、タスクバーに格納されたこのアイコンをクリックするとKeyUpイベントが呼ばれてキーが解放されます。
数日間稼働させてみたところ、私の環境では問題なく動作しているので、しばらくはこれで様子を見ることにします。
2022/06/28 追記: 数ヶ月ほど使ってみたところ、問題なく動作しています。