【发布时间】:2017-10-01 21:28:35
【问题描述】:
我希望我的程序能够使用“SendKeys.SendWait()”,一次将密钥发送到同一进程的多个。例如,如果我打开了 x 数量的记事本进程,我希望它能够计算数量然后将密钥一一发送到所有进程。该程序是一个用 C# 编写的控制台应用程序。
我目前的代码:
Process[] processes = Process.GetProcessesByName("notepad");
Process game1 = processes[0];
do
{
while (!Console.KeyAvailable)
{
IntPtr p = game1.MainWindowHandle;
SetForegroundWindow(p);
SendKeys.SendWait("{ESC}");
Thread.Sleep(1000);
SendKeys.SendWait("^{C}");
SendKeys.SendWait("{ENTER}");
SendKeys.SendWait("{ENTER}");
Thread.Sleep(100);
SendKeys.SendWait("{A}");
}
} while (Console.ReadKey(true).Key != ConsoleKey.NumPad1);
到目前为止,应用程序能够找到记事本并发送密钥,但它只会一遍又一遍地将其发送到 ONE 进程(相同的进程)。我尝试创建一个 for 循环,但我不确定如何计算或实现 for 循环,因此我可以将它发送到打开的 x 个记事本中的每一个。
在下面的代码中,我可以让它在 2 个记事本进程之间发送,但这只是因为我告诉它有 2 个并打开了 2 个。
Process[] processes = Process.GetProcessesByName("notepad");
Process game1 = processes[0];
do
{
while (!Console.KeyAvailable)
{
game1 = processes[0];
IntPtr p = game1.MainWindowHandle;
SetForegroundWindow(p);
SendKeys.SendWait("{ESC}");
Thread.Sleep(1000);
SendKeys.SendWait("^{C}");
SendKeys.SendWait("{ENTER}");
SendKeys.SendWait("{ENTER}");
Thread.Sleep(100);
SendKeys.SendWait("{A}");
game1 = processes[1];
p = game1.MainWindowHandle;
SetForegroundWindow(p);
SendKeys.SendWait("{ESC}");
Thread.Sleep(1000);
SendKeys.SendWait("^{C}");
SendKeys.SendWait("{ENTER}");
SendKeys.SendWait("{ENTER}");
Thread.Sleep(100);
SendKeys.SendWait("{A}");
}
} while (Console.ReadKey(true).Key != ConsoleKey.NumPad1);
【问题讨论】:
-
虽然我没有剩下的代码来测试它,但如果你只是用 for 循环更改你的 while 循环 for (int i = 0; i
-
@Proxy 我曾尝试对进程 [0] 使用 foreach 循环,但我不能在那里有一个 int,因为它是一个进程。
标签: c# process console console-application sendkeys