我有一串值,我想在每个角色的窗口中模拟按键事件。
我计划将WM_KEYDOWN,WM_CHAR和WM_KEYUP事件发送到窗口(因为手动按下某个键似乎就是这样)。
这些消息需要基于virtual key codes的表在wParam中发送int。我可以循环遍历字符串并获取每个字符,但是如何获取该字符并将其转换为与虚拟键代码对应的值? Convert.ToInt32()不起作用。
答案 0 :(得分:10)
答案 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_KEYDOWN
,WM_CHAR
和WM_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 - 最好假设映射是任意的而且不合逻辑。