我一直在使用
SendKeys.Send()
和SendKeys.SendWait()
向前台程序(不同于编写的应用程序)发送按键信息。我尝试通过反复发送同一个键并设置延迟时间来发送连续按键,但在该应用程序中其效果与真正连续按键并不相同。我的问题是:如何向程序发送连续按键?这个按键的效果必须与我在该应用程序内按下该键时一样。
解决方案编辑
解决方案是调用方法:
[DllImport("User32.dll")]
static extern int SendMessage(IntPtr hWnd, uint wMsg, UIntPtr wParam, IntPtr lParam);
使用从以下参数获得的:
public System.Diagnostics.Process[] p = System.Diagnostics.Process.GetProcessesByName("process");
p [0] .MainWindowHandle 是 hWnd
并在窗口上使用 Spy:
在 Spy 中右键单击消息行会显示wMsg,wParam和lParam(全部为十六进制)
SendMessage(p[0].MainWindowHandle, (uint)0x0100, (UIntPtr)0x00000041, (IntPtr)(0x001E0001));
仅发送一个 WM_KEYDOWN 消息即可使效果连续按下键。要停止程序作为键被连续按下的操作,我必须按下并释放键盘上的该键,以生成 WM_KEYUP。在代码中发送 WM_KEYUP 会导致 System.OverFlow "算术运算导致溢出" 异常。有什么想法为什么会发生这种情况吗?
感谢您的回复:Ation 和 takrl