首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将CMD输出复制到剪贴板

将CMD输出复制到剪贴板
EN

Stack Overflow用户
提问于 2015-06-16 03:10:41
回答 2查看 510关注 0票数 4

我正在尝试将运行于CMD提示符之外的程序的输出复制到Windows剪贴板。

代码语言:javascript
复制
        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,它将如下所示:

第一命令(更改目录):

代码语言:javascript
复制
cd C:\users\chris\appdata\roaming\backdoor

第二命令(打开后门,一个cmd工具)。)):

代码语言:javascript
复制
backdoor -rt -on -sCCDXE -p14453

当我通过CMD做这件事时,我得到了这样的结果:

代码语言:javascript
复制
The backdoor password is: 34765

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

但是,在运行我的C#代码时,这是添加到剪贴板中的唯一内容:

代码语言:javascript
复制
C:\users\chris\appdata\roaming\backdoor>

为什么它不捕获“后门密码是: 34765?”就像p.StandardOutput.ReadToEnd()没有阅读所有的东西一样。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-16 03:17:02

ReadToEnd之前调用WaitForExit

克里斯的代码:

代码语言:javascript
复制
    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);
    }

示例控制台应用程序代码:

代码语言:javascript
复制
        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进程。这是此代码工作所必需的。否则,它将永远等待。
票数 2
EN

Stack Overflow用户

发布于 2015-06-16 05:51:20

一个答案是,很可能是,程序是,实际上不是,而是直接写到StdOut

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

代码语言:javascript
复制
backdoor -rt -on -sCCDXE -p14453 > c:\text.txt 

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30858148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档