将CMD输出复制到剪贴板

时间:2015-06-16 03:10:42

标签: c# winforms cmd

我试图将用完CMD提示的程序中的输出复制到Windows剪贴板。

        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()没有阅读所有内容一样。

2 个答案:

答案 0 :(得分:2)

ReadToEnd

之前致电WaitForExit

Chris'代码:

    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进程。这是此代码工作所必需的。否则,它将永远等待。

答案 1 :(得分:2)

一个共鸣可能很好,该程序实际写入StdOut但直接写入屏幕。

通过将输出传递到文件来测试:

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

如果新文件不包含输出,那么您就会卡住并可能需要查看屏幕抓取..