如何将 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 转换为虚拟键代码的主要内容,如果未能解决你的问题,请参考以下文章

NE***Manager 中使用的 Swift 中的钥匙串引用

iOS开发:App项目打包上传到App Store的步骤

如何将thinkcmf导入eclipse

如何将CString转换成wstring

如何将Ios文件上传到

Qt如何将文字变成图片?