【发布时间】:2015-08-29 00:16:40
【问题描述】:
我正在编写一个程序来返回计算机的一些物理信息。 我已经看到在 Windows 中存在命令
WMIC CPU GET /FORMAT:LIST
该命令返回有关进程的全部信息,我需要使用 C 程序中的这些信息。我的意思是,我必须运行 C 程序并显示该信息。
我是 C 初学者。
【问题讨论】:
我正在编写一个程序来返回计算机的一些物理信息。 我已经看到在 Windows 中存在命令
WMIC CPU GET /FORMAT:LIST
该命令返回有关进程的全部信息,我需要使用 C 程序中的这些信息。我的意思是,我必须运行 C 程序并显示该信息。
我是 C 初学者。
【问题讨论】:
出于查看目的,您可以使用这个:
#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 ) );
【讨论】:
公平警告:这里介绍的方法并不是真正的“简单”解决方案。
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 来查询@ 987654339@s.
不幸的是,COM 不是很容易从 C 访问,而是it is doable。 (不幸的是,我在 MSDN 上找不到任何关于它的页面;那篇 CodeProject 文章是我能找到的最好的文章。)
我对这些技术中的任何一项都不是特别熟悉,但如果你对它们都进行研究,这就是你将它们连接在一起以本机获取信息的方式,而不是通过调用到外部命令。
【讨论】: