2010-05-24 14 views
11

मैं बैकस्लैश कुंजी ('\') को कुंजी कोड में कैसे परिवर्तित कर सकता हूं?किसी वर्ण को कुंजी कोड में कैसे परिवर्तित करें?

अपने कीबोर्ड बैकस्लैश कोड पर 220 है, लेकिन नीचे

(int)'\\' 

विधि मुझे रिटर्न 92.

मैं

int ConvertCharToKeyValue(char c) 
{ 
    // some code here... 
} 

कोई भी विचार की तरह कुछ सामान्य रूपांतरण की आवश्यकता है?

+0

क्या आपने कभी इसे सफलतापूर्वक हल किया है? क्या आपको अभी भी इसके साथ मदद चाहिए? – jcolebrand

+0

क्या आपने यह जवाब देखा है? http://stackoverflow.com/questions/318777/c-how-to-translate-virtual-keycode-to-char – jcolebrand

+0

हां। मुझे चार से int में परिवर्तित करने की आवश्यकता है। और मुझे एक मंच-अपरिपक्व समाधान की आवश्यकता है। WM_Messages के बिना ... –

उत्तर

0

कोई ऐसा फ़ंक्शन नहीं है जिसे मैं जानता हूं कि एक वर्ण को वर्चुअल कुंजी कोड में मैप करेगा। हालांकि, आप इस तरह के मैपिंग के निर्माण के लिए निम्न तालिका का उपयोग कर सकते हैं।

http://msdn.microsoft.com/en-us/library/dd375731(v=VS.85).aspx

ध्यान दें कि आपको कुंजीपटल जानने की आवश्यकता होगी, जो आप उल्लेख करते हैं '\' यह VK_OEM_5 वर्चुअल कुंजी है जो यूएस कीबोर्ड के लिए '\' स्थानांतरित नहीं होता है और '|' यदि स्थानांतरित हो जाता है, तो आपके फ़ंक्शन को कीबोर्ड का उपयोग करने की आवश्यकता होगी।

बेशक यदि आप एक वर्चुअल कुंजी कोड से किसी चरित्र में मैप करना चाहते हैं तो आप MapVirtualKeyEx फ़ंक्शन को कॉल करने के लिए interop का उपयोग कर सकते हैं।

अद्यतन आपकी टिप्पणी के आधार पर यह आपको वह चाहिए जो आपको चाहिए।

[DllImport("user32.dll")] 
static extern int MapVirtualKey(int uCode, uint uMapType); 

const uint MAPVK_VK_TO_CHAR = 0x02; 

private void textBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    int key = MapVirtualKey((int)e.KeyCode, MAPVK_VK_TO_CHAR); 
    if (key == (int)'\\') 
    { 

    } 
} 
+0

लिंक के लिए धन्यवाद।मैंने पढ़ा: वीके_ओईएम_5: 0xDC: 220 विविध पात्रों के लिए प्रयुक्त; यह कीबोर्ड द्वारा भिन्न हो सकता है। ~~~~~~~~~~~~~~~~~~~~~~~~यूएस मानक कीबोर्ड के लिए, '\ |' कुंजी मुझे कीबोर्ड-अपरिपक्व समाधान की आवश्यकता है। शायद सबसे अच्छा समाधान की तरह कुछ हो जाएगा: सार्वजनिक शून्य TextBox_KeyDown (वस्तु प्रेषक, KeyEventArgs ई) { अगर ((String.Parse (e.KeyCode) .EndsWith ("\\")) ... } –

+0

@ मुरत, कोई स्ट्रिंग नहीं है। पर्स() फ़ंक्शन। मैंने एक नमूना जोड़ा है जो आपको ऐसा करना चाहिए जो आप यहां करना चाहते हैं। –

16

आप कर सकते हैं पी/आह्वान VkKeyScan() एक टाइपिंग कुंजी कोड एक आभासी कुंजी को वापस परिवर्तित करने के लिए। सावधान रहें कि संशोधक कुंजी स्थिति महत्वपूर्ण है, "|" प्राप्त करना मेरे कीबोर्ड लेआउट पर शिफ्ट कुंजी को दबाए रखने की आवश्यकता है। आपका समारोह हस्ताक्षर इस कुछ तो मैं बस बना लिए अनुमति नहीं देता:

public static Keys ConvertCharToVirtualKey(char ch) { 
     short vkey = VkKeyScan(ch); 
     Keys retval = (Keys)(vkey & 0xff); 
     int modifiers = vkey >> 8; 
     if ((modifiers & 1) != 0) retval |= Keys.Shift; 
     if ((modifiers & 2) != 0) retval |= Keys.Control; 
     if ((modifiers & 4) != 0) retval |= Keys.Alt; 
     return retval; 
    } 

    [System.Runtime.InteropServices.DllImport("user32.dll")] 
    private static extern short VkKeyScan(char ch); 

इसके अलावा कीबोर्ड लेआउट मृत कुंजी (Alt + जीआर) का उपयोग करने टाइपिंग कुंजी उत्पन्न करने की जरूरत है कि सावधान रहना। इस प्रकार का कोड वास्तव में सबसे अच्छा बचा है।

1

तो

var char = System.Windows.Forms.Keys.OemPipe; // 220 
var code = (int)char; 

तो

public static int ToKeyValue(this char ch) 
{ 
    return (int)(System.Windows.Forms.Keys)ch; 
} 
+0

मैं इस धारणा के तहत था कि 'ओमपाइप' '|' और 'ओमबैक्सलाश' होगा \\ ' – Powerlord

+0

@R। Bemrose: हाँ यह होगा। लेकिन जब मैं कीबोर्ड पर '\' दबाता हूं (जो बैकस्पेस और उपरोक्त प्रविष्टि के नीचे है) तो मेरा टेस्ट टेक्स्टबॉक्स 'कीपअप' ईवेंट चलाता है जहां' KeyCode = 220' ओपी की तलाश है – abatishchev

0

या आप इसे सरल रखने के लिए और यह डाली सकता है।

(Keys)keyToConvert 
संबंधित मुद्दे