BONFIRE LIT.

これは完全にBONFIRE LIT。完全にBONFIREだわ、これは。

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行から上はバッチファイルに直接スクリプトを埋め込むためのWindowsShebangみたいなイディオムだそうで、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 追記: 数ヶ月ほど使ってみたところ、問題なく動作しています。