不具合内容
G600にWin+F22を割り当て、これをAutoHotKeyでCtrl+Sにし、マウスでファイルの保存が出来るようにしていた。
AHKのコードは下記のような感じ。
#F22:: KeyWait, LWin SendEvent, ^s return
これでEXCELを保存しようとしたのだが、貼り付け作業の後、だとうまく動かなかったので解析してみた。
原因
キーのログを確認してみると、Ctrlキーを1回押して離すという操作を行ってから、Ctrl+Sを押していた。
5B 15B d 0.48 LWin 85 06D h d 0.00 F22 5B 15B u 0.16 LWin A2 01D i d 0.00 LControl 何故か1回LControlを下げ上げ A2 01D i u 0.00 LControl 85 06D s u 0.00 F22 A2 01D i d 0.00 LControl 53 01F i d 0.00 s 53 01F i u 0.00 s A2 01D i u 0.02 LControl
EXCELは貼り付けした後、Ctrlキーを押すと、貼り付け形式の選択が開かれるが、この状態だとCtrl+Sでの保存は利かない。
何がCtrlを押してるのか調べると、Winキー+Functionキーをトリガーに実行された場合、F1-F9までは、問題ないけど、F10以降のキーと組み合わせると、Ctrlが生成されるみたい。下記の様な、returnするだけのコードでCtrlが生成されている。(AutoHotKeyのバグ臭いですね。。。)
;AHKコード #F10::return 結果 5B 15B d 0.95 LWin 79 044 h d 0.38 F10 79 044 s u 0.08 F10 5B 15B u 0.27 LWin A2 01D i d 0.00 LControl Controlが下げ上げされる。 A2 01D i u 0.00 LControl
対策F10~F12まで
下記のように、UseHookをOffにすると、F10~F12まではCtrlが生成されなくなった。
しかしながら、F13以降は生成されるみたい。。。
#UseHook Off ;Offにする #F10::return 結果 5B 15B d 2.16 LWin 79 044 d 0.16 F10 79 044 u 0.08 F10 5B 15B u 0.08 LWin
対策F13~F24まで
残念ながら、根本的な対策はうまい方法が見つかりませんでした。
Word,EXCEL,PowerPoint,Outlookは、貼り付け直後にCtrlを押すと、やり方の選択画面が開かれます。これらのアプリは、ESCを押して選択画面を消してから保存するか、Alt+1で保存するとうまくいきました。取り合えずなら、ESC飛ばしてからCtrl+s、ESCによる不具合リスクを避けるなら、アクティブウィンドウで出すコマンド切り替えるのが無難そうです。
;ESCしてみる #F22:: KeyWait, LWin send,{ESC} send,^s return ;アプリ判定で切り替え #F22:: if(WinActive("ahk_exe (WINWORD.EXE|EXCEL.EXE|POWERPNT.EXE|OUTLOOK.EXE)")){ send,!1 } else{ send,^s } return
AHKとして、バグが治ってくれると良いんだけどな。
2021/08/13, 追記
昔、色々やったの完全に忘れてた。。。
Send, {Blind}{F22 Up}をすればLControlは消えるみたい。
#F22:: Send, {Blind}{F22 Up} KeyWait, LWin send,^s return
実行結果
5B 15B d 0.23 LWin 85 06D h d 0.00 F22 85 06D i u 0.00 F22 5B 15B u 0.14 LWin 85 06D s u 0.00 F22 A2 01D i d 0.01 LControl 53 01F i d 0.00 s 53 01F i u 0.00 s A2 01D i u 0.00 LControl
これで、完璧に動作するようになりました。
昔やったの忘れてたのが痛い。。。
2022/12/24追記
気づいたら、またCtrlが押されてたので、調べてみたら、下記行を追記したのが原因だった。
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
新規作成で、ahkファイル作成すると自動で記述されてるけど、この行は削除したほうが良さそう。
コメント