2015-06-16 225 views
4

我試圖將運行出CMD提示的程序的輸出複製到Windows剪貼板。將CMD輸出複製到剪貼板

 private void button1_Click(object sender, EventArgs e) 
      { 
      /*Relevant Code*/ 
      Process p = new Process(); 
      p.StartInfo.UseShellExecute = false; 
      p.StartInfo.RedirectStandardOutput = true; 
      p.StartInfo.FileName = "cmd.exe"; 
      p.StartInfo.Arguments = String.Format("/k cd {0} && backdoor -rt -on -s{1} -p{2}", backdoorDir, pSN, sPPC); 
      p.Start(); 

      p.WaitForExit(); 
      string result = p.StandardOutput.ReadToEnd(); 
      System.Windows.Forms.Clipboard.SetText(result); 
      } 

如果我直接進入CMD這一點,應該是這樣的:

第一個命令(改變目錄):

cd C:\users\chris\appdata\roaming\backdoor 

第二個命令(推出後門,一個cmd工具。):

backdoor -rt -on -sCCDXE -p14453 

而當通過CMD做到這一點,我得到這個結果:

The backdoor password is: 34765 

C:\users\chris\appdata\roaming\backdoor> 

但是,運行我的C#代碼時,這是一個被添加到我的剪貼板中的唯一的事情:

C:\users\chris\appdata\roaming\backdoor> 

爲什麼不把它抓取「後門密碼是:34765」這就像p.StandardOutput.ReadToEnd()沒有讀取所有內容。

+1

嘗試使用'p.StartInfo.RedirectStandardError = true'和'p.StandardError.ReadToEnd()'代替 – Icemanind

+0

這樣做......謝謝。 –

回答

2

呼叫ReadToEndWaitForExit

克里斯代碼:

private void button1_Click(object sender, EventArgs e) 
    { 
     /*Relevant Code*/ 
     Process p = new Process(); 
     p.StartInfo.UseShellExecute = false; 
     p.StartInfo.RedirectStandardOutput = true; 
     p.StartInfo.RedirectStandardError = true; 
     p.StartInfo.FileName = "cmd.exe"; 
     p.StartInfo.Arguments = String.Format("/k cd {0} && backdoor -rt -on -s{1} -p{2}", backdoorDir, pSN, sPPC); 
     p.Start(); 

     string result = p.StandardOutput.ReadToEnd(); 
     p.WaitForExit(); 
     System.Windows.Forms.Clipboard.SetText(result); 
    } 

示例控制檯應用程序代碼:

 Process p = new Process(); 
     p.StartInfo.UseShellExecute = false; 
     p.StartInfo.RedirectStandardOutput = true; 
     p.StartInfo.RedirectStandardError = true; 
     p.StartInfo.FileName = "cmd.exe"; 
     p.StartInfo.Arguments = "/C dir"; 
     p.Start(); 

     string result = p.StandardOutput.ReadToEnd(); 
     p.WaitForExit(); 
     Console.WriteLine(result); 
     Console.ReadLine(); 
  • 參數/C執行該命令,然後終止CMD過程。這是代碼工作所必需的。否則,它將永遠等待。
+0

感謝您的快速響應。在「閱讀」之後,我通過加入「等待」來改變你的建議。當我點擊按鈕在我的程序中執行時,我得到一個CMD窗口,顯示如下:'後門密碼是:34765'。但它仍然在我的剪貼板中寫入'C:\ users \ chris \ appdata \ roaming \ backdoor>',還有我添加的Console.WriteLine()以排除任何潛在的剪貼板問題。 –

+1

這一切都是正確的。我只需要使用RedirectStandardError。謝謝! –

+0

好找!我更新了答案 –

2

一個振振有辭可以的情況是,該計劃是實際寫入StdOut,而是直接在屏幕上。

測試此通過管道輸出到一個文件:

backdoor -rt -on -sCCDXE -p14453 > c:\text.txt 

如果新文件不包含任何輸出然後你被卡住,可能需要尋找到屏幕抓取..