SendInput到最小化窗口

是否可以在当前没有焦点的窗口上使用sendInput函数,并且可能通过使用multithreading,同时将输入发送到多个最小化窗口,或者在您在另一个窗口上工作时将输入发送到一个窗口?

我想在c#中做这样的事情

提前致谢。

您只能使用SendInput将输入发送到具有键盘焦点的HWND。 此外,窗口必须附加到调用线程的消息队列,因此不能简单地设置SetFocus

您需要使用GetProcessIdOfThread获取窗口的线程ID。

如果您有线程ID,则可以使用AttachThreadInput函数将线程附加到其他线程输入处理。

毕竟,你可以使用SetFocusSendInput

您可能希望在发送输入时分离线程。

要访问这些方法,您必须使用P / Invoke进行C#或C ++ / CLI。 PInvoke.net作为参考非常方便。 这将是一个小家务,导入所有这些function,但是当你完成后,你应该能够将输入发送到你想要的任何“窗口”。

另外作为旁注,我不确定你是否意识到这一点,但在纯Win32中,一切都被视为一个窗口,甚至是一个按钮。 如果您运气不好,则可能必须将输入发送到属于记事本应用程序的文本控件的句柄。

SendInput无法做到这一点。 您可能想要做的是查找操作系统在执行特定事件时发送到窗口的消息然后模拟它们。 您可以使用Spy ++附加到目标窗口并执行您的事件。 然后使用SendMessage()和PostMessage()重现事件生成的消息。 这适用于记事本。

如果您确实使用此方法,请注意您需要将消息发送到记事本的子窗口,您可以使用类名为“edit”的FindWindowEx()找到该窗口。 例如,要键入文本,您可以尝试WM_KEYDOWN。 您应该注意,此方法不一定可靠: http : //blogs.msdn.com/b/oldnewthing/archive/2005/05/30/423202.aspx