我有一串值,我想在窗口中为每个字符模拟按键事件。
我计划向窗口发送WM_KEYDOWN、WM_CHAR和WM_KEYUP事件(因为这似乎是手动按下键时发生的情况)。
这些消息需要根据虚拟键码表在 wParam 中发送一个 int 。我可以遍历字符串并获取每个字符,但是如何获取该字符并将其转换为与虚拟键码对应的值?Convert.ToInt32() 不起作用。
我有一串值,我想在窗口中为每个字符模拟按键事件。
我计划向窗口发送WM_KEYDOWN、WM_CHAR和WM_KEYUP事件(因为这似乎是手动按下键时发生的情况)。
这些消息需要根据虚拟键码表在 wParam 中发送一个 int 。我可以遍历字符串并获取每个字符,但是如何获取该字符并将其转换为与虚拟键码对应的值?Convert.ToInt32() 不起作用。
发送 WM_KEYDOWN/UP 很麻烦。应用程序本身已经使用修饰键(Shift、Alt、Ctrl)的状态和键盘布局将 WM_KEYDOWN 消息转换为 WM_CHAR。这两者都不是你能控制的,你会随机得到错误的字符。
只需发送 WM_CHAR 消息,将 wparam 设置为字符代码。无需担心 lparam,很少有应用程序使用它。
System.Windows.Forms.SendKeys
是一个 WinForms 类,具有用于在活动窗口上模拟键盘输入的静态方法。
问题是 .NET 无法在另一个应用程序中聚焦窗口(SendKeys 文档讨论了如何解决这个问题)。
看起来它需要 ASCII 字符并将其转换为十六进制。例如,十六进制的“A”是 41。根据你的图表,A 是 0x41,这是正确的(0x 引爆十六进制)。
一般来说,您应该使用(preferred) 或可能(deprecated)而不是直接发送WM_KEYDOWN
,WM_CHAR
和消息。WM_KEYUP
SendInput
keybd_event
您可以使用Input Simulator库,它提供了一个高级 api 来模拟按键并处理所有低级的东西。
一般的解决方案是使用SendMessage WinAPI 函数。 此链接描述SendMessage
的签名并提供示例导入。
哦,要映射 VK 代码,您应该使用MapVirtualKey - 最好假设映射是任意的而不是合乎逻辑的。