我正在尝试获取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”为空)。 我想要的是获取其中的文本(因此它出现在表单的标签上)。我想知道是否有什么方法可以从出现的弹出窗口中仅提取文本,在这种情况下,就像“机器被永久激活”一样。
有没有简单的方法可以做到这一点?
答案 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)中重新实现。