将字符转换为虚拟键代码

时间:2010-06-30 18:35:45

标签: c# .net winapi keycode

我有一串值,我想在每个角色的窗口中模拟按键事件。

我计划将WM_KEYDOWNWM_CHARWM_KEYUP事件发送到窗口(因为手动按下某个键似乎就是这样)。

这些消息需要基于virtual key codes的表在wParam中发送int。我可以循环遍历字符串并获取每个字符,但是如何获取该字符并将其转换为与虚拟键代码对应的值? Convert.ToInt32()不起作用。

7 个答案:

答案 0 :(得分:10)

VkKeyScanEx有人吗?根据MSDN它:

  

“将字符转换为相应的虚拟键代码并转换状态。”

(您也可以使用VkKeyScan但请注意它已被VkKeyScanEx取代。)

答案 1 :(得分:3)

发送WM_KEYDOWN / UP很麻烦。应用程序本身已经使用修改键(Shift,Alt,Ctrl)和键盘布局的状态将WM_KEYDOWN消息转换为WM_CHAR。你无法控制,你会随机得到错误的角色。

只需发送WM_CHAR消息,将wparam设置为字符代码。无需担心lparam,很少有应用程序使用它。

答案 2 :(得分:0)

看起来它需要ASCII字符并将其转换为十六进制。例如,十六进制中的'A'是41.根据你的图表,A是0x41,它是正确的(0x引爆十六进制)。

答案 3 :(得分:0)

一般来说,您不应直接发送WM_KEYDOWNWM_CHARWM_KEYUP消息,而应使用SendInput(首选)或可能keybd_event(已弃用)

答案 4 :(得分:0)

你可以使用Input Simulator库来提供高级api来模拟按键并处理所有低级别的东西。

答案 5 :(得分:0)

System.Windows.Forms.SendKeys是一个WinForms类,其中包含用于在活动窗口上模拟键盘输入的静态方法。

问题在于,.NET无法将窗口集中在另一个应用程序中(SendKeys docs谈论如何绕过它)。

答案 6 :(得分:0)

一般解决方案是使用SendMessage WinAPI函数。 This link描述了SendMessage的签名并提供了示例导入。

哦,为了映射VK代码,你应该使用MapVirtualKey - 最好假设映射是任意的而且不合逻辑。