2016-08-16 14 views
1

は、私がここでのKeyDownイベントを作成してくれ特定のKeyDownエラー

ヘルプ表示されます。

キーのみを作成したいです。他のコマンドは表示されません。

私はこれを試していないが、しかし、あなたはちょうど関連したキーボードデバイスのための修飾子をチェックすることができように見える

答えて

2

に私を助けてください:

if (e.Key == Keys.Enter && e.KeyboardDevice.Modifiers == ModifierKeys.None) 
{ 
    ... 
} 
+0

おかげ その真&ワーキング –

0

は、入力キーと修飾子を確認します。

private void Window_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (Keyboard.IsKeyDown(Key.Enter) && Keyboard.Modifiers == ModifierKeys.None) 
     { 
       MessageBox.Show("Enter Pressed"); 
     } 
} 
+1

注これはPRを使用すること(私が正しくドキュメントを読んでいるのであれば)イベントを生成したデバイスではない可能性があります。 –

2
[DllImport("user32.dll")] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    private static extern bool GetKeyboardState(byte[] keyState); 

    private static readonly byte[] DistinctVirtualKeys = Enumerable.Range(0, 256).Select(KeyInterop.KeyFromVirtualKey) 
     .Where(item => item != Key.None && item != Key.Enter).Distinct().Select(item => (byte)KeyInterop.VirtualKeyFromKey(item)).ToArray(); 

    public int GetDownKeysCount() 
    { 
     var keyboardState = new byte[256]; 
     GetKeyboardState(keyboardState); 
     var downKeyBytes = DistinctVirtualKeys.ToList().FindAll(virtualKey => (keyboardState[virtualKey] & 0x80) != 0); 
     return downKeyBytes.Count; 
    } 

    private void Window_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Enter && e.KeyboardDevice.Modifiers == ModifierKeys.None && GetDownKeysCount() == 0) 
     { 
      MessageBox.Show("Enter is pressed"); 
     } 
    } 
関連する問題