2015-08-29 133 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文章是我能找到的最好的。)

我對這些技術中的任何一種技術都不是特別熟悉,但是如果你研究它們,這就是你如何將它們連接在一起以獲取原生而不是通過呼叫外部命令。

相關問題