[C# Helper]
Index Books FAQ Contact About Rod
[Essential Algorithms, Second Edition]

[The Modern C# Challenge]

[WPF 3d, Three-Dimensional Graphics with WPF and C#]

[The C# Helper Top 100]

[Interview Puzzles Dissected]

[C# 24-Hour Trainer]

[Beginning Software Engineering]

[C# 5.0 Programmer's Reference]

[MCSD Certification Toolkit (Exam 70-483): Programming in C#]

Title: Use WMI to get operating system information in C#

[Use WMI to get operating system information in C#]

When the program starts, it executes the WMI query SELECT * FROM Win32_OperatingSystem. It loops through the results and calls subroutine GetValue for each of the many system parameters that should be available. The following code shows just a couple of the GetValue calls

// Get and display OS properties. private void Form1_Load(object sender, EventArgs e) { ManagementObjectSearcher os_searcher = new ManagementObjectSearcher( "SELECT * FROM Win32_OperatingSystem"); foreach (ManagementObject mobj in os_searcher.Get()) { GetValue(mobj, "BootDevice"); GetValue(mobj, "BuildNumber"); GetValue(mobj, "BuildType"); GetValue(mobj, "Caption"); GetValue(mobj, "CodeSet"); ... } // Auto-size the columns. foreach (ColumnHeader col in lvwResults.Columns) { col.Width = -2; } }

The code first creates a ManagementObjectSearcher to execute the query. (To use this class, add a reference to System.Management and add a using statement for System.Management.)

Next the code loops through the returned ManagementObjects (there should be only one) and calls the GetValue method to get a bunch of values from the ManagementObject.

The following code shows the GetValue method.

// Get a value from the ManagementObject. private void GetValue(ManagementObject mobj, string property_name) { string value; try { value = mobj[property_name].ToString(); } catch (Exception ex) { value = "*** Error: " + ex.Message; } lvwResults.Items.Add(property_name).SubItems.Add(value); }

This method uses the property's name as a ManagementObject index. It converts the property into a string (if possible) and adds the name and its value to the program's ListView control.

This example fetches these properties:

  • BootDevice
  • BuildNumber
  • BuildType
  • Caption
  • CodeSet
  • CountryCode
  • CreationClassName
  • CSCreationClassName
  • CSDVersion
  • CSName
  • CurrentTimeZone
  • DataExecutionPrevention_Available
  • DataExecutionPrevention_32BitApplications
  • DataExecutionPrevention_Drivers
  • DataExecutionPrevention_SupportPolicy
  • Debug
  • Description
  • Distributed
  • EncryptionLevel
  • ForegroundApplicationBoost
  • FreePhysicalMemory
  • FreeSpaceInPagingFiles
  • FreeVirtualMemory
  • InstallDate
  • LargeSystemCache
  • LastBootUpTime
  • LocalDateTime
  • Locale
  • Manufacturer
  • MaxNumberOfProcesses
  • MaxProcessMemorySize
  • MUILanguages[]
  • Name
  • NumberOfLicensedUsers
  • NumberOfProcesses
  • NumberOfUsers
  • OperatingSystemSKU
  • Organization
  • OSArchitecture
  • OSLanguage
  • OSProductSuite
  • OSType
  • OtherTypeDescription
  • PAEEnabled
  • PlusProductID
  • PlusVersionNumber
  • Primary
  • ProductType
  • QuantumLength
  • QuantumType
  • RegisteredUser
  • SerialNumber
  • ServicePackMajorVersion
  • ServicePackMinorVersion
  • SizeStoredInPagingFiles
  • Status
  • SuiteMask
  • SystemDevice
  • SystemDirectory
  • SystemDrive
  • TotalSwapSpaceSize
  • TotalVirtualMemorySize
  • TotalVisibleMemorySize
  • Version
  • WindowsDirectory

Download the example to experiment with it and to see additional details.

© 2009-2022 Rocky Mountain Computer Consulting, Inc. All rights reserved.