C# 发送输入到最小化窗口

C# 发送输入到最小化窗口,c#,C#,是否可以在当前没有焦点的窗口上使用sendInput函数,或者通过使用多线程,同时向多个最小化窗口发送输入,或者在处理另一个窗口时向一个窗口发送输入 我想在c中做类似的事情# 提前感谢。您只能使用SendInput向具有键盘焦点的HWND发送输入。此外,窗口必须附加到调用线程的消息队列,因此不能简单地SetFocus 您需要使用获取窗口的线程id 拥有线程id后,可以使用函数将线程附加到其他线程输入处理 所有这些之后,您可能可以使用SetFocus和SendInput 发送输入后,您可能希望分离

是否可以在当前没有焦点的窗口上使用sendInput函数,或者通过使用多线程,同时向多个最小化窗口发送输入,或者在处理另一个窗口时向一个窗口发送输入

我想在c中做类似的事情#


提前感谢。

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

您需要使用获取窗口的线程id

拥有线程id后,可以使用函数将线程附加到其他线程输入处理

所有这些之后,您可能可以使用
SetFocus
SendInput

发送输入后,您可能希望分离线程

要访问这些方法,您必须对C#或C++/CLI使用p/Invoke。作为参考是非常方便的。导入所有这些函数将是一件小事,但当您完成后,您应该能够将输入发送到您想要的任何“窗口”


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

这在SendInput中是不可能的。您可能想做的是查找在执行特定事件时由操作系统发送到窗口的消息,然后模拟它们。您可以使用Spy++附加到目标窗口并执行事件。然后使用SendMessage()和PostMessage()复制事件生成的消息。这对记事本来说很好用

如果您确实使用此方法,请注意,您需要将消息发送到记事本的子窗口,您可以使用类名为“edit”的FindWindowEx()找到该子窗口。例如,要键入文本,您可以尝试WM_KEYDOWN。您应该注意,这种方法不一定可靠:

这些窗口的线程与您的程序的线程不同吗?它们位于不同的进程空间,不同的程序中。。不同的线程。。我有一个程序,想写一个最小化的记事本。我只是想知道是否可以从一个单独的程序向最小化的非活动窗口发送输入为什么这个问题用“C”和“C++”标记?最小化的记事本窗口相当于一个文本文件。此外,记事本是如此基本,你也可以把文本的形式,在你自己的应用程序与多种编辑框。试图将文本插入另一个应用程序是肮脏的。只是一个便条,但SendMessage不一定是异步的。您可以使用PostMessage来确保更快的执行。请注意(或SendMessage),因为您无法控制实际的键盘状态(shift键等)。我已经完全按照您的建议进行了尝试,使用Spy++查看生成的消息,并重播这些消息。最后,我只能发送所有小写字母,因为我无法实际设置shift键的状态(为VK_shift发送WM_KEYDOWN/WM_keydup不起作用)。太棒了,这正是我想要的