2015-08-29 104 views
0

我正在编写一个程序,它返回计算机的一些物理信息。 我已经看到,在Windows中存在的命令如何从C运行Windows命令

WMIC CPU GET /FORMAT:LIST 

命令返回有关过程的全部信息,我需要使用从C程序的信息。我的意思是,我必须运行C程序并显示这些信息。

我在C.

+0

https://msdn.microsoft.com/en-us/library/aa298534%28v=vs.60%29.aspx – Yetti99

回答

3

初学者要查看的目的,你可以使用这个:

#include<stdio.h> 
#include<stdlib.h> 
int main() 
{ 
    system("WMIC CPU GET /FORMAT:LIST"); 
    return 0; 
} 

如果你想利用这些信息,然后这里的解决方案:https://stackoverflow.com/a/28093714/2317535

使用popen而不是system。见例如这里https://msdn.microsoft.com/en-us/library/96ayss4b.aspx

char psBuffer[128]; 
FILE *pPipe; 

if((pPipe = _popen("set PATH=%PATH%;C:/Program Files (x86)/myFolder/bin", "rt")) == NULL) 
    exit(1); 

然后

while(fgets(psBuffer, 128, pPipe)) { 
    printf(psBuffer); 
} 

if (feof(pPipe)) 
    printf("\nProcess returned %d\n", _pclose(pPipe)); 
+0

为什么说要用popen代替系统? (除了你引用stackoverflow的答案,你链接到那些说的话) – barlop

+0

因为系统调用的输出重定向到stdout。重用输出popen可以提供帮助。 – ashiquzzaman33

+0

是的,[popen()](http://linux.die.net/man/3/popen)是最好的解决方案,因为它可以很容易地读取wmic的输出。完成后不要忘记“pclose()”(如上图所示)! – paulsm4

0

公平的警告:这里介绍的方法是不是一个真正的“方便”的解决方案。

WMIC是一个访问WMI的命令,Windows Management InstrumentationWMIC CPU GET /FORMAT:LIST大概会得到CPU;在WMI本身的层面上,你可能只是试图获得Win32_Processor的所有实例。

WMI can be accessed through COM.要做到这一点,你会用CoCreateInstance创建一个IWbemLocator,然后调用ConnectServer得到一个IWbemServices上,您可以运行ExecQuery来查询Win32_Processor先从。

不幸的是,COM不是很容易从C访问,但是it is doable。 (不幸的是,我找不到MSDN上的任何页面; CodeProject文章是我能找到的最好的。)

我对这些技术中的任何一种技术都不是特别熟悉,但是如果你研究它们,这就是你如何将它们连接在一起以获取原生而不是通过呼叫外部命令。

相关问题