Как получить текст из всплывающего окна, сгенерированного из cmd? - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь получить статус активации 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 голосов
/ 06 ноября 2018

slmgr на самом деле является файлом VBScript, а не исполняемым, при запуске он по умолчанию использует среду выполнения WScript , которая предназначена для оконных сценариев и использует окна сообщений для вывода по умолчанию. Если вы измените на CScript , вы получите консольный вывод:

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

Затем вы можете захватить это: Захват вывода консоли из приложения .NET (C #)

Вы также можете заглянуть внутрь файла скрипта, посмотреть, что он делает, и переопределить его в своем коде (ymmv).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...