AutoHotKeyから送られた上下キー(Up Downキー)がOneNote上で効かない時の対処
経緯
OneNoteはメモ・ノートアプリとしてとても便利なのですが、キーボードショートカットのキーバインド設定ができないのでAutoHotKeyを多用しています。
そこで困ったのが、AutoHotKeyの「Send」コマンドで送られた上下キーを認識してくれないこと。
左右キー等の他のキーは普通に効くのに、上下キーだけ効きません。不思議です。
色々と調べてみたところ、
- 「Send」コマンドではなく、「SendPlay」コマンドだと効くようになる
- ただしWindows Vista以上の場合「SendPlay」コマンドを利用するには、UAC(ユーザアカウント制御)を無効化しなければならない
- UAC無効化が嫌な場合は、UACを回避するためAutoHotkey.exeに署名するスクリプト(EnableUIAccess.ahk)がこちらで公開されているので、それをAutoHotKey.exeに実行する。
という情報がありました。
UACの無効化は嫌だったので、EnableUIAccess.ahk を利用しようとしましたが、現在ファイルがダウンロードできなくなっているようでした。(2017/04/28 時点で)
「SendInput」コマンドを使うと上下キーが効くようになったという情報もあったのですが、自分の環境(Widows10 64bit + OneNote2016 64bit)ではダメでした。
対処
色々と試してみたところ、dllcall でWin32APIの「keybd_event」関数を呼ぶと、とりあえずうまく動作しました。
ここにAutoHotKeyスクリプトをメモしておきます。
Ctrl + K キーで Up
Ctrl + J キーで Down
Ctrl + H キーで Left
Ctrl + L キーで Right
という風に移動する例です。
1 2 3 4 5 6 7 8 9 10 11 |
; すべてのアプリ共通の設定 ^k::Send,{Up} ^j::Send,{Down} ^h::Send,{Left} ^l::Send,{Right} ; OneNoteへ入力する時だけに適用される設定 #IfWinActive, ahk_class Framework::CFrame ^k::dllcall("keybd_event", int, 0x26, int, 0, int, 1, int, 0) ;Up ^j::dllcall("keybd_event", int, 0x28, int, 0, int, 1, int, 0) ;Down #IfWinActive |
最近のコメント