Răz*_*nda 6 c# console winforms
我一直在使用SendKeys.Send()&SendKeys.SendWait()将密钥发送到前台程序(与编写的应用程序不同的程序).
我尝试通过重复发送相同的密钥来发送连续的按键,它们之间有一定的延迟,但效果与该应用程序中的连续按键不同.
我的问题是:如何向程序发送连续按键?该按键的效果必须与在应用程序中连续按下该按键相同.
解决方案编辑
解决方案是调用方法:
[DllImport("User32.dll")]
static extern int SendMessage(IntPtr hWnd, uint wMsg, UIntPtr wParam, IntPtr lParam);
Run Code Online (Sandbox Code Playgroud)
参数来自:
public System.Diagnostics.Process [] p = System.Diagnostics.Process.GetProcessesByName("process");
p [0] .MainWindowHandle是hWnd
并在窗口上使用间谍:

右键单击Spy中的消息行显示wMsg,wParam和lParam(所有3个十六进制)
SendMessage(p [0] .MainWindowHandle,(uint)0x0100,(UIntPtr)0x00000041,(IntPtr)(0x001E0001));
通过仅发送一个WM_KEYDOWN消息,效果就是连续按下键.为了停止程序作为键持续按下,我必须按下键盘上的那个键并释放它,以便生成WM_KEYUP.在代码中发送WM_KEYUP会产生System.OverFlow"算术运算导致溢出".例外.任何想法为什么会发生这种情况?
感谢您的回复:Ation和takrl
尝试使用 Win API SendMessage与 WM_KEYDOWN 和 WM_KEYUP。此消息之间应有适当的延迟。您也可以使用 PostMessage 进行异步发送。
[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, uint msg, int wparam, int lparam);
Run Code Online (Sandbox Code Playgroud)