[英]C#: In the keydown event of a textbox, how do you detect currently pressed modifiers + keys?
[英]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
來確定某個鍵是否按下。e
是KeyEventArgs
的一個實例。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");}
最簡單的方法是:
為表單創建 KeyDown 事件
在類中寫下下面的 DllImports:
[DllImport("user32")] public static extern int GetAsyncKeyState(int vKey); [DllImport("user32.dll")] public static extern int GetKeyboardState(byte[] keystate);
在 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 }
粘貼代碼this.KeyPreview = true;
在 Form_Load 事件和繁榮中,你去。
這是目前處理多個 Key 事件的最佳方式,因為它是 WinForms 的一種簡單直接的方式。
您可以使用程序級鍵盤掛鈎來實現它。 您可以在 user32.dll 中使用 Win-API 函數,例如SetWindowsHookEx 。
以下是它的一些例子:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.