将CMD输出复制到剪贴板

本文关键字:剪贴板 复制 输出 CMD | 更新日期: 2023-09-27 17:56:19

我正在尝试将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()没有阅读所有内容一样。

将CMD输出复制到剪贴板

WaitForExit之前调用ReadToEnd

克里斯的代码:

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

一种说法很可能是程序实际上不是在写入StdOut而是直接写入屏幕。

通过将输出管道到文件中来测试这一点:

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

如果新文件也不包含输出,那么您就会陷入困境,可能需要查看屏幕抓取。