4

我有一串值,我想在窗口中为每个字符模拟按键事件。

我计划向窗口发送WM_KEYDOWNWM_CHARWM_KEYUP事件(因为这似乎是手动按下键时发生的情况)。

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

4

7 回答 7

10

VkKeyScanEx有人吗?根据 MSDN 它:

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

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

于 2010-07-01T14:11:20.540 回答
4

发送 WM_KEYDOWN/UP 很麻烦。应用程序本身已经使用修饰键(Shift、Alt、Ctrl)的状态和键盘布局将 WM_KEYDOWN 消息转换为 WM_CHAR。这两者都不是你能控制的,你会随机得到错误的字符。

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

于 2010-06-30T18:46:22.157 回答
0

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

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

于 2010-06-30T18:56:45.783 回答
0

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

于 2010-06-30T18:40:41.567 回答
0

一般来说,您应该使用(preferred) 或可能(deprecated)而不是直接发送WM_KEYDOWN,WM_CHAR和消息。WM_KEYUPSendInputkeybd_event

于 2010-06-30T18:41:21.160 回答
0

您可以使用Input Simulator库,它提供了一个高级 api 来模拟按键并处理所有低级的东西。

于 2010-06-30T18:42:44.270 回答
0

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

哦,要映射 VK 代码,您应该使用MapVirtualKey - 最好假设映射是任意的而不是合乎逻辑的。

于 2010-06-30T19:02:40.233 回答