2008年4月10日

 昨日のコードで同じキーが表示されていたのは、System.Windows.Input.Key 列挙体に数値は同じで名前が違うものが含まれていたからでした。次のものが重なっているようですね。

値: キー名

6: Return, Enter
8: Capital, CapsLock
9: KanaMode, HangulMode
12: HanjaMode, KanjiMode
19: Prior, PageUp
20: Next, PageDown
30: Snapshot, PrintScreen
140: Oem1, OemSemicolon
145: Oem2, OemQuestion
146: Oem3, OemTilde
149: Oem4, OemOpenBrackets
150: Oem5, OemPipe
151: Oem6, OemCloseBrackets
152: Oem7, OemQuotes
154: Oem102, OemBackslash
157: OemAttn, DbeAlphanumeric
158: OemFinish, DbeKatakana
159: OemCopy, DbeHiragana
160: OemAuto, DbeSbcsChar
161: OemEnlw, DbeDbcsChar
162: OemBackTab, DbeRoman
163: Attn, DbeNoRoman
164: CrSel, DbeEnterWordRegisterMode
165: ExSel, DbeEnterImeConfigureMode
166: EraseEof, DbeFlushString
167: Play, DbeCodeInput
168: Zoom, DbeNoCodeInput
169: NoName, DbeDetermineString
170: Pa1, DbeEnterDialogConversionMode

 値が重なっているキーの一覧を出力するコード。

Dim table = New Dictionary(Of Integer, List(Of String))
For Each keyName In [Enum].GetNames(GetType(Key))
    Dim keyValue = CType([Enum].Parse(GetType(Key), keyName), Key)

    If Not table.ContainsKey(keyValue) Then
        table.Add(keyValue, New List(Of String))
    End If
    table(keyValue).Add(keyName)
Next

For Each item In From t In table Where t.Value.Count > 1
    Console.WriteLine(item.Key.ToString & ": " & String.Join(", ", item.Value.ToArray))
Next

 以上。

 おまけ(本題?)。今後使うメソッド。Key列挙体からRegisterHotkey関数に必要な仮想キーの値を取得する方法。

KeyInterop.VirtualKeyFromKey(Key.A)

 作りかけのコードを含むプロジェクトを破棄してしまいました……。

posted @ 23:50 | Feedback (307)