将字符转换为虚拟键代码

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

我计划将WM_KEYDOWN , WM_CHAR和WM_KEYUP事件发送到窗口(因为这是手动按下键时似乎发生的事情)。

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

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

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

VkKeyScanEx任何人? 根据MSDN它:

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

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

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

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

您可以使用输入模拟器库,它提供高级API以模拟按键并处理所有低级别的内容。

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

问题是.NET无法将窗口集中在另一个应用程序中( SendKeys文档讨论了如何解决这个问题)。

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

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