如何将 KeyPressevents keychar 转换为虚拟键代码
Posted
技术标签:
【中文标题】如何将 KeyPressevents keychar 转换为虚拟键代码【英文标题】:How do i convert KeyPressevents keychar to virtual key code 【发布时间】:2018-09-20 14:42:15 【问题描述】:我正在编写一个 WPF 应用程序,它允许用户按下键盘上的一个键,然后存储虚拟键代码以供以后执行 目前,我的代码只捕获 KeyChar
private void Window_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
System.Windows.MessageBox.Show("Key char : " + e.Key);
在稍后阶段,代码会以类似的方式执行...
else if(e.Result.Text.Equals("windows"))
//windows key down
keybd_event((byte)VK_LWIN, 0x5B, 0, 0);
//windows key up
keybd_event((byte)VK_LWIN, 0x5B, KEYEVENTF_KEYUP, 0);
keybd_event 方法使用虚拟键码来识别程序需要在系统上执行的键。
我可以轻松捕获并执行这些单独的变量
但是如何将 keyChar 转换为虚拟键代码以存储然后在单独的窗口中执行?
用户 32 DLL 方法.. https://www.pinvoke.net/default.aspx/user32.keybd_event
【问题讨论】:
【参考方案1】:您可以使用KeyInterop
课程。这包含在 .Net Keys 和 VKeys 之间转换的静态方法:
int vkey;
private void Window_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
vkey = System.Windows.Input.KeyInterop.VirtualKeyFromKey(e.Key);
System.Windows.MessageBox.Show("Key char : " + e.Key);
keybd_event((byte)vkey, 0x5B, 0, 0);
【讨论】:
我添加了您的代码,它为键“k”输出数字“75” 这不是真正的值吗? msdn.microsoft.com/en-us/library/windows/desktop/… 是的,你错了;)正如你的链接所说,“k”键是十六进制的 0x4B = 4*16+11 = 75 所以 keybd_event 使用 ASCII 而不是 Hex? 很可能它基于 ASCII,我不确定,但虚拟键是数字,keybd_event
需要一个数字(字节)。十进制 (75) 和十六进制 (0x4B) 中 75 的数字表示都表示相同的意思,并且无论如何都存储在字节中 - 01001011以上是关于如何将 KeyPressevents keychar 转换为虚拟键代码的主要内容,如果未能解决你的问题,请参考以下文章