簡體   English   中英

如何檢測 C# 表單中是否按下了多個鍵

[英]How to detect if multiple keys are pressed in C# forms

我一直在尋找一種解決方案來檢測是否在C#中按下了多個鍵(我找不到解決方案!)。 我有這個游戲有兩個玩家,我需要檢測是否按下鍵來移動他們。 (我正在使用 C# 表單)我只找到了檢測是否同時按住兩個鍵並且它們沒有幫助的答案。

- 編輯 -

如何使用 KeyPressed (C#) 檢測是否按下了某個鍵

問題的根源在於 Winforms 根本不支持這個簡單的請求。

聽起來怪怪的? 這是。 Winforms 通常非常接近硬件層,雖然有時這可能很有趣,但它也可能只是一個皮塔......

((應該注意 Hans 的一個隱藏提示:在KeyUp中,您會被告知釋放了哪個鍵,以便您可以跟蹤任意數量的鍵..))

但是現在對於不需要您保留一堆KeyDown bools KeyUp KeyUp中管理它們的直接解決方案..:輸入Keyboard.IsKeyDown

有了它,這樣的代碼可以工作:

使用Keyboard.IsKeyDown來確定某個鍵是否按下。 eKeyEventArgs的一個實例。

 if (Keyboard.IsKeyDown(Key.Return)) { btnIsDown.Background = Brushes.Red; } ...

當然,您也可以檢查多個鍵:

if (Keyboard.IsKeyDown(Key.A) && Keyboard.IsKeyDown(Key.W)) ...

唯一的要求是你從WPF借用這個:

首先:添加命名空間:

using System.Windows.Input;

然后:在項目中添加兩個引用:

PresentationCore
WindowsBase

在此處輸入圖像描述

現在您可以隨時測試鍵盤,包括KeyPress事件。

也許用於打印到控制台...

if (Input.GetKeyDown(KeyCode.G))     {print ("G key pressed");}

最簡單的方法是:

  1. 為表單創建 KeyDown 事件

  2. 在類中寫下下面的 DllImports:

     [DllImport("user32")] public static extern int GetAsyncKeyState(int vKey); [DllImport("user32.dll")] public static extern int GetKeyboardState(byte[] keystate);
  3. 在 KeyDown 事件中寫下以下代碼:

     byte[] keys = new byte[256]; GetKeyboardState(keys); if ((keys[(int)Keys.ControlKey] & keys[(int)Keys.S] & 128) == 128) // change the keys if you want to { // it worked }
  4. 粘貼代碼this.KeyPreview = true; 在 Form_Load 事件和繁榮中,你去。

這是目前處理多個 Key 事件的最佳方式,因為它是 WinForms 的一種簡單直接的方式。

您可以使用程序級鍵盤掛鈎來實現它。 您可以在 user32.dll 中使用 Win-API 函數,例如SetWindowsHookEx

以下是它的一些例子:

一個簡單的 C# 全局鍵盤鈎子
C# 應用程序中的全局鍵盤捕獲

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM