SendKeys 到多个相同的进程
SendKeys to multiple of the same process
我希望我的程序能够使用 "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);
到目前为止,应用程序能够找到记事本并发送密钥,但它只会一遍又一遍地将其发送到一个进程(同一进程)。我已经尝试创建一个 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 < processes.Length; i++)
{
Process game1 = processes[i];
}
抱歉,我无法编辑评论中的代码,但基本上您只需要从位置 0 的第一个元素开始遍历您的进程数组,并在通知 1 运行 进程后递增计数器
如果你想使用 foreach 循环,你需要这样做
foreach (var temp in processes)
{
Process game1 = temp; // the assigment is not necessary you can just use the temp variable
}
基本上,对于 foreach,您不需要指定索引,因为它会 "automatically" 检查存储在数组中的每个对象。有关 for 与 foreach 的更多详细信息
Difference between foreach and for loops over an IEnumerable class in C#
我希望我的程序能够使用 "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);
到目前为止,应用程序能够找到记事本并发送密钥,但它只会一遍又一遍地将其发送到一个进程(同一进程)。我已经尝试创建一个 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 < processes.Length; i++)
{
Process game1 = processes[i];
}
抱歉,我无法编辑评论中的代码,但基本上您只需要从位置 0 的第一个元素开始遍历您的进程数组,并在通知 1 运行 进程后递增计数器
如果你想使用 foreach 循环,你需要这样做
foreach (var temp in processes)
{
Process game1 = temp; // the assigment is not necessary you can just use the temp variable
}
基本上,对于 foreach,您不需要指定索引,因为它会 "automatically" 检查存储在数组中的每个对象。有关 for 与 foreach 的更多详细信息 Difference between foreach and for loops over an IEnumerable class in C#