【问题标题】:How to run a windows command from C如何从 C 运行 windows 命令
【发布时间】:2015-08-29 00:16:40
【问题描述】:

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

WMIC CPU GET /FORMAT:LIST

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

我是 C 初学者。

【问题讨论】:

标签: c windows


【解决方案1】:

出于查看目的,您可以使用这个:

#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 ) );

【讨论】:

  • 为什么说用popen代替system? (除了你引用你链接到的那个stackoverflow答案说那些话)
  • 因为系统调用的输出重定向到标准输出。重用输出 popen 会有所帮助。
  • 是的,popen() 是这里最好的解决方案,因为它可以轻松读取 wmic 的输出。完成后不要忘记“pclose()”(如上图所示)!
【解决方案2】:

公平警告:这里介绍的方法并不是真正的“简单”解决方案。

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

我对这些技术中的任何一项都不是特别熟悉,但如果你对它们都进行研究,这就是你将它们连接在一起以本机获取信息的方式,而不是通过调用到外部命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 2013-09-13
    • 2023-03-17
    相关资源
    最近更新 更多