【发布时间】:2015-10-16 06:06:22
【问题描述】:
有没有办法从 C 应用程序中运行命令提示符命令?我想使用wmic diskdrive get serialnumber 命令查看硬盘的制造商序列号。
【问题讨论】:
-
这是在 Windows 上,对吗?
-
@duskwuff 对于 Windows 是的
标签: c windows command-prompt
有没有办法从 C 应用程序中运行命令提示符命令?我想使用wmic diskdrive get serialnumber 命令查看硬盘的制造商序列号。
【问题讨论】:
标签: c windows command-prompt
有很多函数可以让你从C调用外部程序,其中一些是"standard",一些是specific to Windows。
但在您的场景中,我建议您使用 Windows 提供的 WMI API,您可以在 stackoverflow 上找到这方面的示例:
How to obtain data from WMI using a C Application? how to run a wmi query in c
我没有提供示例,而是链接到关于 SO 的现有答案,因为我认为复制已经存在的内容没有意义。
【讨论】:
您可以尝试使用popen :-
#include<stdio.h>
#include<string.h>
int main()
{
char c;
FILE *file = popen("wmic diskdrive get serialnumber", "r");
if (file) {
while ((c = getc(file)) != EOF)
putchar(c);
fclose(file);
}
return 0;
}
由于这是一个文件对象,您现在可以根据需要轻松将其写入文件,也可以随意检索它。
【讨论】:
是的,你可以。但是,这样做被认为是不好的做法,因为这会使您的应用不必要地依赖平台并产生开销。
像这样
#include <stdio.h>
#include <string.h>
void main ()
{
system("wmic diskdrive get serialnumber");
}
阅读更多内容here 关于输出(引用自上面的链接):
错误返回值为-1,返回状态为 否则命令。
您还可以使用ReadConsoleOutputCharacter 函数(链接到 msdn 入站引用)来读取控制台输出。
但是,在您尝试使用命令提示符获取此类数据之前,请考虑使用 API 或任何其他方式来检索数据,因为调用命令提示符会为您的应用程序增加不必要的可笑开销。
【讨论】:
wmic 的输出类似于 SerialNumber Z81EFB1 E6503403 F123123。这不适合int