如何将KeyPressevents keychar转换为虚拟键代码

时间:2018-04-10 20:59:31

标签: c# wpf pinvoke user-input user32

我正在编写一个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 个答案:

答案 0 :(得分:0)

您可以使用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);
}