2017-05-03 118 views
1

我希望我的程序能够使用“SendKeys.SendWait()”,一次发送键到多个相同的进程。例如,如果我打开了x个记事本进程数量,我希望它能够对数量进行计数,然后将密钥逐个发送到所有进程。该程序是用C#编写的控制台应用程序。SendKeys到多个相同的进程

是我到目前为止的代码:

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); 
+0

虽然我没有其他的代码来测试它,但是如果你只是改变你的while循环for循环for(int i = 0; i Proxy

+0

@Proxy我试图为进程[0]使用foreach循环,但我不能有一个int,因为它是一个进程。 – janky

回答

0

虽然我没有你的代码来测试它的其余部分,应该工作,如果你只是一个改变你的while循环的循环

for (int i = 0; i < processes.Length; i++) 
     { 
      Process game1 = processes[i]; 
     } 

抱歉,我不能在评论编辑的代码,但基本上你只需要遍历的处理阵列启动从位置0的第一个元素开始,并增加计数呃,你已通知1个运行过程

如果你想使用你需要做的是这样

foreach (var temp in processes) 
      { 
       Process game1 = temp; // the assigment is not necessary you can just use the temp variable 
      } 

基本上用foreach你并不需要,因为它会“自动指定索引的foreach循环后“检查存储在数组内的每个对象。关于vs foreach的更多细节 Difference between foreach and for loops over an IEnumerable class in C#

+0

工作非常感谢你! – janky

相关问题