ऐसा लगता है कि आप कीबोर्ड में सभी कुंजी की स्थिति से पूछना चाहते हैं। उस के लिए सबसे अच्छा समारोह Win32 API कॉल GetKeyboardState
मैं नहीं मानता कि समारोह का एक अच्छा कामयाब बराबर नहीं है। इसके लिए PInvoke कोड काफी सीधे आगे
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetKeyboardState(byte [] lpKeyState);
var array = new byte[256];
GetKeyboardState(array);
इस प्रणाली में हर आभासी कुंजी के ऊपर/नीचे राज्य के साथ byte[]
से स्थापित हो जाएगा है। यदि उच्च बिट सेट किया गया है तो वर्चुअल कुंजी वर्तमान में दबाया गया है। एक वर्चुअल कुंजी कोड में Key
मैपिंग संख्यात्मक Key
मान के byte
भाग पर विचार करके किया जाता है।
public static byte GetVirtualKeyCode(Key key) {
int value = (int)key;
return (byte)(value & 0xFF);
}
Key
मूल्यों के अधिकांश के लिए ऊपर काम करता है, लेकिन आप आपरिवर्तक कुंजी के साथ सावधान रहने की जरूरत है। मान Keys.Alt
, Keys.Control
और Keys.Shift
यहां काम नहीं करेंगे क्योंकि वे तकनीकी रूप से संशोधक हैं और महत्वपूर्ण मान नहीं हैं। संशोधक का उपयोग करने के लिए आप वास्तविक जुड़े कुंजी मान Keys.ControlKey
, Keys.LShiftKey
, आदि ... (वास्तव में कुछ भी है कि कुंजी के साथ समाप्त होता है) उपयोग करने की आवश्यकता
तो जाँच के लिए एक विशेष कुंजी किया जा सकता है के रूप में
var code = GetVirtualKeyCode(Key.A);
if ((array[code] & 0x80) != 0) {
// It's pressed
} else {
// It's not pressed
}
इस प्रकार सेट किया गया है
आप सभी चाबियाँ दबाया जब आप कोड के किसी विशिष्ट अंश चलाना चाहते हैं, या आप एक घटना जब भी कोई कुंजी दबाने होता है कि चाहते हैं कार्य करें: निम्न विधि सभी चाबियों का संग्रह है कि वर्तमान में दबाया जा रहा है देता है? – zimdanen
संभव डुप्लिकेट [Winforms में कीबोर्ड शॉर्टकट को लागू करने का सबसे अच्छा तरीका?] (Http://stackoverflow.com/questions/400113/best-way-to-implement-keyboard-shortcuts-in-winforms) –
कहें कि मैं चाहता हूं MouseWheel के लिए एक इवेंटहालर, लेकिन जब मैं EventHandler में कुछ निष्पादित करता हूं तो मुझे "Ctrl" कुंजी दबाया जाना चाहिए। इसलिए यदि मैं पहिया को स्क्रॉल करता हूं तो मुझे केवल मूसहेल के परिणाम मिलते हैं, कुंजीपटल नहीं। – Deukalion