将输入发送到最小化窗口
本文关键字:最小化 窗口 输入 | 更新日期: 2023-09-27 17:57:58
是否可以在当前没有焦点的窗口上使用sendInput函数,或者通过使用多线程,同时向多个最小化的窗口发送输入,或者在处理另一个窗口时向一个窗口发送输入?
我想在c#中做这样的事情
提前谢谢。
您只能使用SendInput
将输入发送到具有键盘焦点的HWND。此外,窗口必须附加到调用线程的消息队列,因此也不能简单地SetFocus
。
您需要使用GetProcessIdOfThread
获取窗口的线程id。
当您拥有线程id时,您可以使用AttachThreadInput
函数将您的线程附加到其他线程的输入处理。
在所有这些之后,您可能可以使用SetFocus
和SendInput
。
您可能希望在发送输入后分离线程。
要访问这些方法,您必须使用C#或C++/CLI的p/Invoke。PInvoke.net作为参考非常方便。导入所有这些函数将是一件小家务,但当您完成后,您应该能够将输入发送到您想要的任何"窗口"。
顺便说一句,我不确定您是否知道这一点,但在纯Win32中,所有东西都被视为一个窗口,甚至是一个按钮。如果运气不好,您可能不得不将输入发送到属于记事本应用程序的文本控件的句柄。
SendInput不可能做到这一点。您可能想做的是找到操作系统在执行特定事件时发送到窗口的消息,然后模拟它们。您可以使用Spy++附加到目标窗口并执行您的事件。然后使用SendMessage()和PostMessage()来重现事件生成的消息。这适用于记事本。
如果您确实使用此方法,请注意,您需要将消息发送到记事本的子窗口,您可以使用类名为"edit"的FindWindowEx()找到该子窗口。例如,要键入文本,可以尝试WM_KEYDOWN。您应该注意,这种方法并不一定可靠:http://blogs.msdn.com/b/oldnewthing/archive/2005/05/30/423202.aspx