如何从cmd生成的弹出框中获取文本?

时间:2018-11-06 16:12:44

标签: c# windows winforms cmd

我正在尝试获取Windows的激活状态。我有以下代码:

 Process proc = new Process();


 proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
 proc.StartInfo.FileName = "cmd.exe";
 proc.StartInfo.Arguments = "/C slmgr /xpr";
 proc.StartInfo.UseShellExecute = false;
 proc.StartInfo.CreateNoWindow = true;
 proc.StartInfo.RedirectStandardOutput = true;
 proc.StartInfo.RedirectStandardInput = true;
 proc.Start();

 string x = "";

 while (!proc.HasExited)
 {
     x += proc.StandardOutput.ReadToEnd();
 }

 return x;

您可能已经知道,命令“ slmgr / xpr”会弹出一个窗口,通知您Windows的激活状态。

执行此代码,我得到一个弹出框(“ x”为空)。 我想要的是获取其中的文本(因此它出现在表单的标签上)。我想知道是否有什么方法可以从出现的弹出窗口中仅提取文本,在这种情况下,就像“机器被永久激活”一样。

有没有简单的方法可以做到这一点?

1 个答案:

答案 0 :(得分:3)

slmgr实际上是一个VBScript文件,不是可执行文件,在运行它时,它将默认使用 WScript 运行时,该运行时用于窗口脚本,并使用消息框作为默认输出。如果更改为 CScript ,您将获得控制台输出:

proc.StartInfo.FileName = "cscript.exe";
proc.StartInfo.Arguments = "/nologo \"" + Path.Combine(Environment.SystemDirectory, "slmgr.vbs") + "\" /xpr";

然后您可以捕获以下内容:Capturing console output from a .NET application (C#)

您还可以查看脚本文件的内部,查看其作用并在代码(ymmv)中重新实现。