gpt4 book ai didi

c# - 将键码转换为字符/字符串

转载 作者:行者123 更新时间:2023-11-30 13:14:54 29 4
gpt4 key购买 nike

我正在尝试将 System.Windows.Forms.Keys 转换为字符串/字符,使用:

KeysConverter converter = new KeysConverter();
string text = converter.ConvertToString(keyCode);
Console.WriteLine(text);

但它为“.”返回了“OemPeriod”。和“Oemcomma”代表“,”。有没有办法得到准确的字符?

最佳答案

无论如何,您要实现的目标都不是微不足道的任务。 Windows(例如)使用键盘映射(键盘布局)将键盘键转换为实际字符。以下是我是如何实现这一目标的:


public string KeyCodeToUnicode(Keys key)
{
byte[] keyboardState = new byte[255];
bool keyboardStateStatus = GetKeyboardState(keyboardState);

if (!keyboardStateStatus)
{
return "";
}

uint virtualKeyCode = (uint)key;
uint scanCode = MapVirtualKey(virtualKeyCode, 0);
IntPtr inputLocaleIdentifier = GetKeyboardLayout(0);

StringBuilder result = new StringBuilder();
ToUnicodeEx(virtualKeyCode, scanCode, keyboardState, result, (int)5, (uint)0, inputLocaleIdentifier);

return result.ToString();
}

[DllImport("user32.dll")]
static extern bool GetKeyboardState(byte[] lpKeyState);

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

[DllImport("user32.dll")]
static extern IntPtr GetKeyboardLayout(uint idThread);

[DllImport("user32.dll")]
static extern int ToUnicodeEx(uint wVirtKey, uint wScanCode, byte[] lpKeyState, [Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszBuff, int cchBuff, uint wFlags, IntPtr dwhkl);

关于c# - 将键码转换为字符/字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23170259/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com