C# 如何将字符转换为键代码?
如何将反斜杠键(“\”)转换为键代码 在我的键盘上,反斜杠代码是220,但方法如下C# 如何将字符转换为键代码?,c#,.net,C#,.net,如何将反斜杠键(“\”)转换为键代码 在我的键盘上,反斜杠代码是220,但方法如下 (int)'\\' 返回我92 我需要一些通用转换,比如 int ConvertCharToKeyValue(char c) { // some code here... } 有什么想法吗?据我所知,没有一个函数可以将字符映射到虚拟密钥代码。但是,您可以使用下表开始构建这样的映射 请注意,您需要了解键盘,查看您提到的键“\”,这是VK_OEM_5虚拟键,对于我们键盘来说,如果未移位,则为“\
(int)'\\'
返回我92
我需要一些通用转换,比如
int ConvertCharToKeyValue(char c)
{
// some code here...
}
有什么想法吗?据我所知,没有一个函数可以将字符映射到虚拟密钥代码。但是,您可以使用下表开始构建这样的映射 请注意,您需要了解键盘,查看您提到的键“\”,这是VK_OEM_5虚拟键,对于我们键盘来说,如果未移位,则为“\”,如果移位,则为“|”,因此您的功能还需要了解正在使用的键盘 当然,如果您想从虚拟键代码映射到一个字符,您可以使用它来调用函数 更新根据您的评论,这会给您想要的
[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)'\\')
{
}
}
您可以p/调用VkKeyScan()将键入键代码转换回虚拟键。请注意,修改器键状态很重要,获取“|”需要按住键盘布局上的shift键。你的函数签名不允许这样,所以我只是编了一些东西:
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+Gr)生成键入键的键盘布局。最好避免这种代码。如果
var char = System.Windows.Forms.Keys.OemPipe; // 220
var code = (int)char;
然后
或者,你可以保持它的简单性并将其转换
(Keys)keyToConvert
谢谢你的链接。我读到:VK_OEM_5:0xDC:220用于杂项字符;它可以根据键盘的不同而变化。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~对于美国标准键盘,“\\”键我需要独立于键盘的解决方案。最好的解决方案可能是:public void TextBox\u KeyDown(object sender,KeyEventArgs e){if((String.Parse(e.KeyCode).EndsWith(\\))。}@Murat,没有String.Parse()函数。我添加了一个示例,它应该可以帮助您完成您在这里想要做的事情。我的印象是,
OemPipe
将是
,而OemBackslash
将是`\`@R。贝姆罗斯:是的。但是当我在键盘上按“\”时(在Backspace下方,在Enter上方)我的测试文本框触发KeyUp
事件,其中KeyCode=220
哪个OP在寻找这个答案?是的。我需要从char转换为int。我需要一个独立于平台的解决方案。如果没有WM_消息……我似乎相信不存在这样的“独立于平台的”因为键盘键盘没有Windows键,Windows键盘没有一个命令键。Linux本身也没有。所有三个都能识别其他键,但是映射不一致。或者你忽略了应用程序中的修饰符吗?这可能会带来其他困难。s、 我的理解可能是错误的。YMMV.HTTH。你曾经成功地解决过这个问题吗?你还需要帮助吗?
(Keys)keyToConvert