c ++ - Sådan kalder du WMI ved hjælp af MinGW

Indlæg af Hanne Mølgaard Plasc

Problem



Efter dage med at søge på internettet (herunder MSDN) for at få hardware unikke id'er ved hjælp af C ++, fandt jeg ud af, at jeg skal bruge WMI. Faktisk kunne jeg finde nogle gode eksempler så godt som denne. Problemet er: Jeg kan ikke kompilere det ved hjælp af MinGW, men det går fint på Visual Studio ved hjælp af Microsoft compiler, men med MinGW (som min ansøgning er kompileret med) giver det mig snesevis af fejl.
Dette kunne lyde et gammelt spørgsmål, men desværre kunne jeg ikke finde en løsning hidtil efter dage med at søge på internettet. Jeg bruger MinGW på Windows 7. [2]

Bedste reference


MinGW skal give dig adgang til Win32-api'erne uden at have brug for Visual Studio.


Følgende skal kompilere og køre med MinGW.


#include <windows.h>
#include <stdio.h>

int main()
{
   SYSTEM\_INFO siSysInfo;

   // Copy the hardware information to the SYSTEM\_INFO structure. 

   GetSystemInfo(&siSysInfo); 

   // Display the contents of the SYSTEM\_INFO structure. 

   printf("Hardware information: 
");  
   printf("  OEM ID: \%u
", siSysInfo.dwOemId);
   printf("  Number of processors: \%u
", 
      siSysInfo.dwNumberOfProcessors); 
   printf("  Page size: \%u
", siSysInfo.dwPageSize); 
   printf("  Processor type: \%u
", siSysInfo.dwProcessorType); 
   printf("  Minimum application address: \%lx
", 
      siSysInfo.lpMinimumApplicationAddress); 
   printf("  Maximum application address: \%lx
", 
      siSysInfo.lpMaximumApplicationAddress); 
   printf("  Active processor mask: \%u
", 
      siSysInfo.dwActiveProcessorMask); 

   return 0;
}


Yderligere læsning for at hjælpe dig med at komme i gang. [3]

Andre referencer 1


MinGW har ingen støtte til WMI. Der er nogle anstrengelser i MinGW64, men det kan stadig ikke kaldes komplet (for eksempel wbemuuid.lib er savnet).


Nogle projekter løser dette problem ved at udvide MinGW med savnede WMI-biblioteker fra Microsoft WMI SDK eller MinGW64 (se dette projekt eller denne tråd til eksempler). [4] [5]


En anden løsning til at få enhedens UID'er til din konkrete opgave, kan bruge Windows Setup API, som understøttes af MinGW. Et godt eksempel på at bruge det kan findes på CodeProject site. [6]

Andre referencer 2


Tjek Microsoft Reference


Vind API-systemoplysninger [7]