将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()
没有阅读所有内容一样。
在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
如果新文件也不包含输出,那么您就会陷入困境,可能需要查看屏幕抓取。