SoFunction
Updated on 2025-03-06

Write tool classes for obtaining hardware information based on C#

Write in front

Pass in the counter name through the performance counter class PerformanceCounter to obtain the corresponding system metric data for analysis and reference.
The ManagementObjectSearcher class in the class library realizes querying management information, such as: motherboard information, memory information, hard disk information, graphics card information, sound card information, network card information, manufacturer and production date, etc.

You need to introduce a namespace:

using ;
using ;
using ;
using ;

Code implementation

    public class DeviceInfoHelper
    {
        /// <summary>
        /// Get CPU utilization        /// </summary>
        public static float GetCpuStatus()
        {
            // Create a performance counter for CPU usage percentage.            var cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
            if (cpuCounter != null)
            {
                return ();
            }
            return 0;
        }
 
        /// <summary>
        /// Get the remaining memory        /// </summary>
        public static float GetAvailableMemory()
        {
            // Create a performance counter with memory occupancy bytes            var ramCounter = new PerformanceCounter("Memory", "Available MBytes");
            if (ramCounter != null)
            {
                return ();
            }
            return 0;
        }
 
        /// <summary>
        /// Get the current process CPU and memory usage        /// </summary>
        public static Tuple<float, float> GetCurrentProcessorUsage()
        {
            var processName = ().ProcessName;
            var theCPUCounter = new PerformanceCounter("Process", "% Processor Time", processName);
            var theMemCounter = new PerformanceCounter("Process", "Working Set", processName);
            return new Tuple<float, float>((), ());
        }
 
        /// <summary>
        /// Get a summary of hardware information        /// </summary>
        public static string GetHardwareSummary()
        {
            var hdInfo = new HardwardSummary
            {
                MainboardName = "unknown",
                MemorySize = "unknown",
                HarddiskSize = "unknown",
                VideocardName = "unknown",
                SoundcardName = "unknown",
                NetworkcardName = "unknown",
                ManufacturerName = "unknown",
                ManufactureDate = "unknown"
            };
 
            #region motherboard information 
            try
            {
                ManagementObjectSearcher myMainboard = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
                foreach (ManagementObject board in ())
                {
                     = board["Product"].ToString();
                }
            }
            catch (Exception ex)
            {
                 = "unknown";
            }
 
            #endregion
 
            #region Memory Information 
            try
            {
                ManagementObjectSearcher myMemory = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMemory");
                //Define the total memory size variable                double MemorySize = 0;
                foreach (ManagementObject obj in ())
                {
                    //Convert memory size to G units                    MemorySize += (obj["Capacity"]) / 1024 / 1024 / 1024;
                }
                 = () + "G";
            }
            catch (ManagementException e)
            {
                 = "unknown";
            }
 
            #endregion
 
            #region Hard disk information 
            try
            {
                //Get all hard disk information of this machine                ManagementObjectSearcher myHarddisk = new ManagementObjectSearcher("select * from Win32_DiskDrive");
                foreach (ManagementObject drive in ())
                {
                    //Get hard disk capacity                    var capacity = ((drive["Size"]) / 1024 / 1024 / 1024).ToString("0.00") + "G";
                    //Get hard disk type                    var mediaType = drive["MediaType"];
                     = () + "|" + ();
                }
            }
            catch (Exception ex)
            {
                 = "unknown";
            }
 
            #endregion
 
            #region Graphics Card Information 
            try
            {
                ManagementObjectSearcher myVideoObject = new ManagementObjectSearcher("select * from Win32_VideoController");
                foreach (ManagementObject obj in ())
                {
                     = obj["Name"].ToString();
                }
            }
            catch (ManagementException ex)
            {
                 = "unknown";
            }
 
            #endregion
 
            #region Sound card information 
            try
            {
                // Create WMI search object                ManagementObjectSearcher mySoundcard = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_SoundDevice");
                // traverse the search results                foreach (ManagementObject mo in ())
                {
                    // Get the sound card name                     = ("Name").ToString();
                }
            }
            catch (ManagementException ex)
            {
                 = "unknown";
            }
 
            #endregion
 
            #region network card information 
            try
            {
                // Get local network interface information                NetworkInterface[] nics = ();
                foreach (NetworkInterface adapter in nics)
                {
                    // If it is an RJ45 network card                    if ( == )
                    {
                        string S1 = (string);
                        if (("PCI"))
                        {
                             = S1;
                        }
                    }
                }
            }
            catch (ManagementException ex)
            {
                 = "unknown";
            }
 
            #endregion
 
            #region Manufacturer and production date 
            try
            {
                //Get the manufacturer                ManagementObjectSearcher ManufacturerInfo = new ManagementObjectSearcher("select * from Win32_ComputerSystem");
                foreach (ManagementObject obj in ())
                {
                     = obj["Manufacturer"].ToString();
                }
                //Get production date                ConnectionOptions options = new ConnectionOptions();
                ManagementScope scope = new ManagementScope("\\\\.\\root\\cimv2", options);
                ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_BIOS");
                ManagementObjectSearcher BoisInfo = new ManagementObjectSearcher(scope, query);
                foreach (ManagementObject mo in ())
                {
                    string StrManufactureDate = mo["ReleaseDate"].ToString().Substring(0, 8);
                    DateTime DT = (StrManufactureDate, "yyyyMMdd", );
                     = ("{0:d}", DT);
                }
            }
            catch (Exception ex)
            {
                 = "unknown";
                 = "unknown";
            }
 
            #endregion
 
            return (hdInfo);
        }
    }
 
    public class HardwardSummary
    {
        public string MainboardName { get; set; }
        public string MemorySize { get; set; }
        public string HarddiskSize { get; set; }
        public string VideocardName { get; set; }
        public string SoundcardName { get; set; }
        public string NetworkcardName { get; set; }
        public string ManufacturerName { get; set; }
        public string ManufactureDate { get; set; }
    }

This is the end of this article about writing tools for obtaining hardware information based on C#. For more related content related to C# to obtain hardware information, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!