前回: WPFでホットキーコントロールへの道2
コントロールを作る場合、キーが入力されたときにキー名を表示してあげる必要があるけど、第1・2回からもわかるように単純にKey列挙体をToStringするだけではダメですよね。めんどいけどキーの値(数値、Key列挙体の値)とコントロールに表示する文字列のペアは全部コードで指定することにしようと思います。
以上で数値と表示名が1対1で決まるかというと決まらないよね。日本語キーボードと英語キーボードでは同じ数値のキーでも入力される文字は変わってくると思う。たとえば、日本語キーボードの「@」キーを押したとき、PreviewKeyDownイベントで取れる値では Key.OemTilde となります。コントロールには「@」と表示されるのが期待される。たぶん英語キーボードだと「@」の位置はShift押しながら2なので、コントロールに「@」と表示する機会はないでしょう(英語キーボード持ってないのできちんと確認できない)。
日本語キーボードか否か
そんなわけで、少なくとも日本語キーボードかそれ以外かは考慮しておきたい。キーボードの判別は.NETであるのかなー? Windows APIだとGetKeyboardTypeでできました。
<DllImport("user32")> _
Private Shared Function GetKeyboardType(ByVal nTypeFlag As Integer) As Integer
End Function
と宣言しておいて
If GetKeyboardType(0) = 7 Then
Console.WriteLine("日本語キーボード")
End If
引数0のときの戻り値が7の場合、日本語キーボードです。
今回はここまで。遠い道のりだなぁ。