SendKeys到无效的应用程序

5 c# postmessage send sendkeys winforms

我试图弄清楚如何使我的C#应用​​程序将键发送到另一个应用程序窗口,而无需关注它。我有一个单词列表和3个记事本文件。想象一下,我依次打开了所有3个记事本窗口,我的程序将把列表框中的第一个单词写入第一个记事本窗口。第二个记事本窗口中的第二个单词,第三个记事本窗口中的第三个单词。然后重新开始并继续。因此,我希望它在每个单词中张贴1个字,然后一遍又一遍地继续下去。

但是我只想出了如何使用1个记事本窗口(同时处于活动状态)进行操作。

int i = 0;
i = listBox1.SelectedIndex;
i = i + 1;
if (i > listBox1.Items.Count - 1)
    i = 0;
listBox1.SelectedIndex = i;
string message = listBox1.SelectedItem.ToString();

SendKeys.Send(message);
SendKeys.Send("{ENTER}");
Run Code Online (Sandbox Code Playgroud)

这将需要我首先将焦点放在记事本窗口上,启动计时器,然后再将焦点放在记事本窗口上。然后,它将仅遍历列表并键入单词(每行1个)。而且效果很好。但我希望能够在3个窗口上执行此操作。

然后我需要以某种方式获取窗口标题,而不是进程名称。我将有3个称为记事本的进程。但是,如果将它们分别命名为Note1,Note2,Note3,我该怎么做?

我需要帮助来列出要写入哪些程序的清单:

listofprograms = ["Note1", "Note2", "Note3"];
Run Code Online (Sandbox Code Playgroud)

然后它将找到使用这些名称打开的应用程序窗口,然后以某种方式将文本写入这些窗口。

有人可以帮我吗?到目前为止,尚未找到任何相关信息,请相信我,我环顾四周!

Jar*_*Par 2

不幸的是,没有很好的方法来做到这一点。 SendKeys是一个非常简单且理想的 API,但它仅适用于活动窗口。没有办法让它在非活动窗口上工作,也没有一个 API 具有与在非活动窗口上工作相同的易用性。

一般来说,当人们遇到这个问题时,他们必须走两条路之一

  1. 物理激活您想要一次向一个发送密钥的应用程序
  2. 下拉至更低级别SendMessagePostMessage发送键盘事件

第二种选择通常更可靠,但更难实施。