如何将连续按键发送到程序?

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,wParamlParam(所有3个十六进制)

SendMessage(p [0] .MainWindowHandle,(uint)0x0100,(UIntPtr)0x00000041,(IntPtr)(0x001E0001));

通过仅发送一个WM_KEYDOWN消息,效果就是连续按下键.为了停止程序作为键持续按下,我必须按下键盘上的那个键并释放它,以便生成WM_KEYUP.在代码中发送WM_KEYUP会产生System.OverFlow"算术运算导致溢出".例外.任何想法为什么会发生这种情况?

感谢您的回复:Ation和takrl

Ati*_*ion 3

尝试使用 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)