2014年5月27日火曜日

wpf : KeyGestureを継承したクラスでCtrlキーの左右を判別できるように、ついでに修飾キーなしでも動くように

今、適当に自分で使うツールを作っています。 作っているツールはキーボードショートカットで色々できるようにするつもりです。 で、[Ctrl+1]とかのショートカットは普通にwpf標準のコードでできるんですが、Ctrlキーの左右は指定できないんですよね。 でも左右で別の処理をさせたい。 「ローカルキーフックとかしないとダメなのかなぁ? なんとかならないかなぁ?」と検索してたら、KeyGestureを継承したクラスでできることがわかりました。 あんまり動作確認はしてないけど、次のようなコードでShiftキーとCtrlキーについては左右の判別ができそうです。 (一応コードにはできそうなそぶりで書いてあるけど、AltキーとWinキーは正常に動きませんでした。)

Windows標準のショートカットキーとぶつかったときとか上手くいかない組み合わせもありそうですが、とりあえず今やりたい事はできそうな予感。

ついでに思い出したんですが、以前の投稿で「A-Z、数字、記号など押して文字が出る普通のキーは修飾キーとセットで登録しないとなりません」ってのを調べた記憶が。 だけどCtrlキーの左右指定と同じようなコードで、修飾キーなしのKeyGestureを作ることはできそうです。

確認用の簡単なコードを作りました。 Visual Studio2012 Expressでwpfプロジェクトを作成。 MainWindow.xamlは触ってません。 MainWindow.xaml.csはこんな感じ。

とりあえず動きました。 あとは、キーの組み合わせでダメなやつとかはツールのコーディングをしながら確認しようかな?