【问题标题】:How do i convert KeyPressevents keychar to virtual key code如何将 KeyPressevents keychar 转换为虚拟键代码
【发布时间】: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

【问题讨论】:

    标签: c# wpf pinvoke user-input user32


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 2010-09-24
    • 1970-01-01
    相关资源
    最近更新 更多