मेरे पास एक चुंबकीय कार्ड रीडर है जो डेटा भेजने के लिए कीबोर्ड इनपुट का उपयोग करता है। मैं एक KeyDown घटना है, जहां मैं इस वस्तु मिल (सी # WPF) का उपयोग कर रहा:कंसैट कीडाउन इवेंट (कीज) एक सी # (डब्ल्यूपीएफ) स्ट्रिंग
KeyEventArgs e
मैं चाहता हूँ कुंजी है कि मैं मिल लेते हैं और उन्हें एक स्ट्रिंग बनाने के लिए। मैंने e.Key.ToString()
को संक्षिप्त करने की कोशिश की, लेकिन यह काम नहीं करता है। मेरे इनपुट में बहुत सी संख्याएं और संकेत हैं (जैसे;? = आदि), और e.Key.ToString() चीज काम नहीं करती है (यह मुझे किसी संख्या के लिए डी 3 देता है, और SHIFT या CTRL + के लिए एक और कुंजी संकेत)।
मैं सिर्फ स्ट्रिंग चाहते हैं, इसलिए जब मैं उदाहरण Console.WriteLine के लिए उपयोग मैं की तरह
;51895401051=000001341?
और नहीं
Oem1SHIFTD1CNTRLD2D3D2D1SHIFTD9OemQuestion ....
कुछ मिल जाएगा मैं KeyConverter उपयोग करने की कोशिश, लेकिन मैं आंकड़ा करने में असमर्थ था यह बाहर है।
क्या कोई मेरी मदद कर सकता है?
मेरे वर्तमान ईवेंट हैंडलर (जो ठीक से काम नहीं करता है) है:
public static void keyPress(Object sender, KeyEventArgs e)
{
string keyCodeString = e.Key.ToString();
char? key = null;
if (keyCodeString.Length == 1)
{
key = keyCodeString[0];
}
else
{
if (keyCodeString.StartsWith("NumPad"))
{
key = keyCodeString[keyCodeString.Length - 1];
}
else if (keyCodeString.StartsWith("D"))
key = keyCodeString[keyCodeString.Length - 1];
}
TypedText += key;
}
कहाँ TypedText स्ट्रिंग मैं चाबियाँ करने के लिए concat करना चाहते हैं। आउटपुट परिणाम ऊपर समझाया गया था।
मैंने इसे स्वयं हल किया। यहां जवाब है। नीचे GetCharFromKey
समारोह एक कुंजी (यदि आपके पास e.Key भेजना चाहिए) और एक चार रिटर्न:
public enum MapType : uint
{
MAPVK_VK_TO_VSC = 0x0,
MAPVK_VSC_TO_VK = 0x1,
MAPVK_VK_TO_CHAR = 0x2,
MAPVK_VSC_TO_VK_EX = 0x3,
}
[DllImport("user32.dll")]
public static extern bool GetKeyboardState(byte[] lpKeyState);
[DllImport("user32.dll")]
public static extern uint MapVirtualKey(uint uCode, MapType uMapType);
[DllImport("user32.dll")]
public static extern int ToUnicode(
uint wVirtKey,
uint wScanCode,
byte[] lpKeyState,
[Out, MarshalAs(UnmanagedType.LPWStr, SizeParamIndex = 4)]
StringBuilder pwszBuff,
int cchBuff,
uint wFlags);
public static char GetCharFromKey(Key key)
{
char ch = ' ';
int virtualKey = KeyInterop.VirtualKeyFromKey(key);
byte[] keyboardState = new byte[256];
GetKeyboardState(keyboardState);
uint scanCode = MapVirtualKey((uint)virtualKey, MapType.MAPVK_VK_TO_VSC);
StringBuilder stringBuilder = new StringBuilder(2);
int result = ToUnicode((uint)virtualKey, scanCode, keyboardState, stringBuilder, stringBuilder.Capacity, 0);
switch (result)
{
case -1:
break;
case 0:
break;
case 1:
{
ch = stringBuilder[0];
break;
}
default:
{
ch = stringBuilder[0];
break;
}
}
return ch;
}
मैं इस समय मान लें कि आपके कुंजीपटल एमुलेटर के रूप में अपने कार्ड रीडर का उपयोग करें। क्या आपके पास कोई एसडीके है जिसका आप उपयोग कर सकते हैं? आमतौर पर ऐसे डिवाइस ड्राइवर और नियंत्रण/एपीआई के साथ आते हैं जिनका उपयोग आप अपने ऐप्स में कर सकते हैं। – StaWho
यह सिर्फ एक कीबोर्ड इनपुट है। तथ्य यह है कि यह एक कार्ड रीडर है या सिर्फ एक गड़गड़ाहट है जिसे मैं कीबोर्ड पर हिट करता हूं, इस मामले के लिए कोई फर्क नहीं पड़ता। – Programer
क्या कोई अन्य कार्यक्रम है जिसका आप उपयोग कर सकते हैं? – raznagul