将字符转换为虚拟键代码
我有一串值,我想在每个角色的窗口中模拟按键事件。
我计划将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_KEYDOWN
, WM_CHAR
和WM_KEYUP
消息,而应使用SendInput
(首选)或可能使用keybd_event
(不建议使用)。
您可以使用输入模拟器库,它提供高级API以模拟按键并处理所有低级别的内容。
System.Windows.Forms.SendKeys
是一个WinForms类,其中包含用于在活动窗口上模拟键盘输入的静态方法。
问题是.NET无法将窗口集中在另一个应用程序中( SendKeys文档讨论了如何解决这个问题)。
一般的解决方案是使用SendMessage WinAPI函数。 此链接描述SendMessage
的签名并提供示例导入。
哦,为了映射VK代码,你应该使用MapVirtualKey – 最好假设映射是任意的而不是逻辑的。