Windows Management Instrumentation (WMI)

WMI is a component of the Microsoft operating system that allows you to monitor virtually every piece of the system either locally or remotely. This is an implementation of the Desktop Management Task Force's (DMTF) Web Based Enterprise Management (WBEM). WMI has a query language (WQL) that allows you to query Windows Management Service. Here is an example of how this is used.

//Class Name: ManagementObj
//Add reference to System.Management namespace to the project
using System;
using System.Management;
using System.Management.Instrumentation;
namespace WindowsApplication1
public class ManagementObj
public ManagementObj()
public static string Search(string queryString, string propertyValue)
string output = "";
ManagementObjectSearcher mgtObj =
new ManagementObjectSearcher(queryString);
foreach(ManagementObject result in mgtObj.Get())
output += result.GetPropertyValue(propertyValue);
return output;

How to use this class?

Add the following code to button click event. Since Search is a static method there is not need to create an instance of the ManagementObj Class (shown above).

Console.WriteLine(ManagementObj.Search("Select Name from Win32_CDROMDrive", "Name"));
Console.WriteLine(ManagementObj.Search("Select * from Win32_BIOS", "Caption"));

This MSDN link contains links to the Computer System Hardware Classes. The Computer System Hardware category groups classes that represent hardware related objects like input devices, hard disks, expansion cards, video devices, networking devices, and system power.

Creating query is simple.

Win32_Keyboard ( see this link ) has the following properties:

class Win32_Keyboard : CIM_Keyboard
uint16 Availability;
string Caption;
uint32 ConfigManagerErrorCode;
boolean ConfigManagerUserConfig;
string CreationClassName;
string Description;
string DeviceID;
boolean ErrorCleared;
string ErrorDescription;
datetime InstallDate;
boolean IsLocked;
uint32 LastErrorCode;
string Layout;
string Name;
uint16 NumberOfFunctionKeys;
uint16 Password;
string PNPDeviceID;
uint16 PowerManagementCapabilities[];
boolean PowerManagementSupported;
string Status;
uint16 StatusInfo;
string SystemCreationClassName;
string SystemName;

To get the name of the keyboard we would use this syntax:

Console.WriteLine(ManagementObj.Search("Select * from Win32_Keyboard", "Name"));

Note that ManagementObj.Search returns string. Modify this class to use appropriate return type.

Possible uses:

Network administrators to remotely manage machines best use this technology. However its use is not limited. WMI helps in building applications that need to be constantly aware of its resources.