如何从C运行Windows命令

时间:2015-08-29 00:16:41

标签: c windows

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

WMIC CPU GET /FORMAT:LIST

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

我是C的初学者。

2 个答案:

答案 0 :(得分: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 ) );

答案 1 :(得分:0)

公平警告:此处介绍的方式并非真正的“简单”解决方案。

WMIC是一个访问WMI Windows Management Instrumentation的命令。 WMIC 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文章是我能找到的最好的文章。)

我对这些技术并不是特别熟悉,但是如果你对它们进行全面研究,那就是你将它们连接在一起以获取本地的信息而不是通过呼叫一个外部命令。