2014-11-10 4 views
1
[DllImport("user32.dll")] 
private static extern short VkKeyScan(char ch); 

set = set + "\r\n"; 
int txL = set.Length; 
for (int o = 1; o < (txL); o++) 
{ 
    short vkey = VkKeyScan(set[o]); //MessageBox.Show(vkey.ToString()); 
    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; 
} 

이 기능은 표준 알파벳 및 키보드 레이아웃을 KeyCode로 변환합니다. 어떻게 다른 모든 유니 코드를 중국어로 변환하고 ASCII로 기호를 변환 할 수 있습니까? "!, @, #, $ ..." 그래서 어떻게 ALT와 다른 Key를 결합하고 KeyCode로 변환 할 수 있습니까? 예 : ALT+33 = "!" and KeyCode = 0xF0C# ascii to keycode?

답변

1

ALT 코드는 유니 코드 기호의 16 진수 값을 나타내는 십진수입니다. 예를 들어, 당신은 당신이 진수에서 당신이 33 얻을 진수 것을 변환하는 경우 !의 값이 0021 것을 볼 것이다 official chart 확인하고 고도가 + 숫자 패드 3 + 숫자 패드-3 어디에서 오는지 그 경우 .

당신은 http://www.unicode.org/charts

+0

"!"을 표시하기 위해 프로그램에 ALT + 33을 쓰고 싶다면. Keycode로서 어떻게해야합니까? –

+1

alt 코드는 윈도우의 일부이므로 프로그램에서 해석하지 않습니다. 수동으로하고 싶다면 Alt를 가로 챌 필요가 있습니다. 눌렀을 때 num pad 번호를 쌓은 다음 다시 올리십시오. num pad 값을 바이트 배열로 변환 한 다음'Encoding.Unicode.GetString (byte []) '을 사용하여 바이트 배열을 유니 코드 값으로 변환합니다. –

3

대응하는 키가없는 많은 유니 코드 문자가 있습니다. 예를 들어 105 개의 키 키보드가 있으며 약 100 만 개의 유니 코드 문자가 있습니다. 또한 키 코드 - 문자 매핑은 키보드 레이아웃에 따라 다릅니다. 따라서 귀하의 문제에 대한 일반적인 대답은 없습니다.

+0

tnQ에서 해당 PDF보고에서 모든 가능한 유니 코드 키 코드 값을 얻을 수 있습니다, 그래서 어떻게, 어디에서 각 유니 코드에 대한 키 코드 번호를 찾을 수 있습니까? –

+1

내가 말했듯이, 수백만 유니 코드 문자는 키보드에 입력 할 수 없으므로 (적어도 하나의 키 누르기가 아닌) 키 코드 (스캔 코드라고도 함)가 없습니다. 유니 코드 문자는 공식적으로 코드 포인트라고하며, 특정 문자에 해당하는 임의의 숫자입니다. 키와 문자 간의 매핑은 부분적이며 키보드 레이아웃에 따라 다릅니다. – fejesjoco

+0

그래서 Shift 키를 사용하면 구조체는 무엇입니까? '예 : Shift + 1'이므로 'Shift = 0xA0' 및'1 = 0x31' 어떻게 결합 할 수 있습니까? 아니면 keydown, keyup을 사용하여 만들 수 있습니까? –