阅读wmic控制台应用程序的输出

时间:2014-09-24 14:42:25

标签: c++ visual-studio-2010 visual-studio visual-c++ wmic

好的,我想调用\ windows \ system32 \ wbem中的wmic.exe执行命令,只读取那里的输出。

根据msdn(http://msdn.microsoft.com/en-us/library/aa390423(v=vs.85).aspx),我不想使用wmi,而且我不想通过cmd执行wmic。

我无法找到一种方法让它发挥作用。我也读了这篇帖子,但没有人回答non-trivial use of `Console` by `wmic.exe`

我尝试过这样的事情:

FILE* pipe = _popen("wmic.exe cpu get", "r"); 
if (!pipe) 
 throw std::exception("error"); 
char buffer[128]; 
std::string output; 
while(!feof(pipe)) 
{ 
 if(fgets(buffer, 128, pipe) != NULL) output += buffer; 
} 

_pclose(pipe); 
std::stringstream oss(output); 
std::vector<std::string> processor_description; 
std::string buffer; 
while (std::getline(oss, buffer)) 
  processor_description.push_back(buffer); 

1 个答案:

答案 0 :(得分:0)

Set WshShell = WScript.CreateObject("WScript.Shell")

Set wmic = WshShell.Exec("wmic cpu get")

Do While wmic.Status = 0

     WScript.Sleep 100

Loop



msgbox wmic.Status

     If Not wmic.StdOut.AtEndOfStream Then

          Msgbox wmic.StdOut.ReadAll

     End If

这是有效的vbscript。您可以访问相同的对象。

记得wmic写的是unicode,也没有OEM(cmd.exe)或ANSI(旧的GUI程序)。如果将其视为ansi,可能会发生角色转换。