是否可以在当前没有焦点的窗口上使用sendInput函数,并且可能通过使用多线程,同时将输入发送到多个最小化窗口,或者在您工作时将输入发送到一个窗口另一个窗口?
我想在c#
中做这样的事情提前感谢。
答案 0 :(得分:5)
您只能使用SendInput
以键盘焦点向HWND发送输入。此外,窗口必须附加到调用线程的消息队列,因此不能简单地SetFocus
。
您需要使用GetProcessIdOfThread
获取窗口的主题ID。
当你有线程ID时,可以使用AttachThreadInput
函数将线程附加到其他线程输入处理。
完成所有这些后,您可以使用SetFocus
和SendInput
。
您可能希望在发送输入后分离线程。
要访问这些方法,您必须使用P / Invoke进行C#或C ++ / CLI。 PInvoke.net作为参考非常方便。这将是一个小家务,导入所有这些功能,但是当你完成后,你应该能够将输入发送到你想要的任何“窗口”。
另外作为旁注,我不确定你是否意识到这一点,但在纯Win32中,一切都被视为一个窗口,甚至是一个按钮。如果您运气不好,可能需要将输入发送到属于记事本应用程序的文本控件的句柄。
答案 1 :(得分:2)
使用SendInput是不可能的。您可能想要做的是查找操作系统在执行该特定事件时发送到窗口的消息,然后模拟它们。您可以使用Spy ++附加到目标窗口并执行您的事件。然后使用SendMessage()和PostMessage()重现事件生成的消息。这适用于记事本。
如果您使用此方法,请注意您需要将消息发送到记事本的子窗口,您可以使用类名为“edit”的FindWindowEx()找到该窗口。例如,要键入文本,您可以尝试WM_KEYDOWN。您应该注意,此方法不一定可靠: http://blogs.msdn.com/b/oldnewthing/archive/2005/05/30/423202.aspx