How to retrieve GPU, Hard Drive, Processor, OS, Printers, Network Information in C#

By FoxLearn 7/6/2024 3:06:30 AM   46
In C#, you can retrieve various system information such as GPU, Hard Drive, Processor, OS using System.Management namespace.

Here's how to retrieve GPU, Hard Drive, Processor, OS, Printers, Network Information in C#.

How to retrieve GPU Information in C#

To get GPU information in C#, you can use WMI (Windows Management Instrumentation). One common approach is using WMI through the ManagementObjectSearcher class in the System.Management namespace

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController");

foreach (ManagementObject mo in searcher.Get())
{
    Console.WriteLine("Name - {0}", mo["Name"]);
    Console.WriteLine("Status - {0}", mo["Status"]);
    Console.WriteLine("Caption - {0}", mo["Caption"]);
    Console.WriteLine("DeviceID - {0}", mo["DeviceID"]);
    Console.WriteLine("AdapterRAM - {0}", mo["AdapterRAM"]);
    Console.WriteLine("AdapterDACType - {0}", mo["AdapterDACType"]);
    Console.WriteLine("Monochrome - {0}", mo["Monochrome"]);
    Console.WriteLine("InstalledDisplayDrivers - {0}", mo["InstalledDisplayDrivers"]);
    Console.WriteLine("DriverVersion - {0}", mo["DriverVersion"]);
    Console.WriteLine("VideoProcessor - {0}", mo["VideoProcessor"]);
    Console.WriteLine("VideoArchitecture - {0}", mo["VideoArchitecture"]);
    Console.WriteLine("VideoMemoryType - {0}", mo["VideoMemoryType"]);
}

How to retrieve Hard Drive Information in C#

Similarly, you can use WMI to get information about hard drives.

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");

foreach (ManagementObject mo in searcher.Get())
{
     Console.WriteLine("Hard Drive: {0}", mo["Model"]);
}

You can also you the DriveInfo class included in the System.IO namespace.

DriveInfo[] drivers = DriveInfo.GetDrives();

foreach (var obj in drivers)
{
    Console.WriteLine("Drive {0}", obj.Name);
    Console.WriteLine("Drive type: {0}", obj.DriveType);
    if (obj.IsReady == true)
    {
        Console.WriteLine("Volume label: {0}", obj.VolumeLabel);
        Console.WriteLine("File system: {0}", obj.DriveFormat);
        Console.WriteLine("Available space to current user: {0, 15} bytes", obj.AvailableFreeSpace);
        Console.WriteLine("Total available space: {0, 15} bytes", obj.TotalFreeSpace);
        Console.WriteLine("Total size of drive: {0, 15} bytes ", obj.TotalSize);
        Console.WriteLine("Root directory: {0, 12}", obj.RootDirectory);
    }
}

How to retrieve OS Information in C#

To retrieve operating system information:

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");
foreach (ManagementObject mo in searcher.Get())
{
    Console.WriteLine("Name - {0}", mo["Name"]);
    Console.WriteLine("DeviceID - {0}" + mo["DeviceID"]);
    Console.WriteLine("Manufacturer - {0}" + mo["Manufacturer"]);
    Console.WriteLine("CurrentClockSpeed - {0}" + mo["CurrentClockSpeed"]);
    Console.WriteLine("Caption - {0}" + mo["Caption"]);
    Console.WriteLine("NumberOfCores - {0}" + mo["NumberOfCores"]);
    Console.WriteLine("NumberOfEnabledCore - {0}" + mo["NumberOfEnabledCore"]);
    Console.WriteLine("NumberOfLogicalProcessors - {0}" + mo["NumberOfLogicalProcessors"]);
    Console.WriteLine("Architecture - {0}" + mo["Architecture"]);
    Console.WriteLine("Family - {0}" + mo["Family"]);
    Console.WriteLine("ProcessorType - {0}" + mo["ProcessorType"]);
    Console.WriteLine("Characteristics - {0}" + mo["Characteristics"]);
    Console.WriteLine("AddressWidth - {0}" + mo["AddressWidth"]);
}

How to retrieve Processor Information in C#

To get information about the CPU, you can use the ManagementObjectSearcher class.

// usage c# get cpu
ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_Processor");
foreach (ManagementObject mo in seacher.Get())
{
    Console.WriteLine("Name - {0}", mo["Name"]);
    Console.WriteLine("DeviceID - {0}", mo["DeviceID"]);
    Console.WriteLine("Manufacturer - {0}", mo["Manufacturer"]);
    Console.WriteLine("CurrentClockSpeed - {0}", mo["CurrentClockSpeed"]);
    Console.WriteLine("Caption - {0}", mo["Caption"]);
    Console.WriteLine("NumberOfCores - {0}", mo["NumberOfCores"]);
    Console.WriteLine("NumberOfEnabledCore - {0}", mo["NumberOfEnabledCore"]);
    Console.WriteLine("NumberOfLogicalProcessors - {0}", mo["NumberOfLogicalProcessors"]);
    Console.WriteLine("Architecture - {0}", mo["Architecture"]);
    Console.WriteLine("Family - {0}", mo["Family"]);
    Console.WriteLine("ProcessorType - {0}", mo["ProcessorType"]);
    Console.WriteLine("Characteristics - {0}", mo["Characteristics"]);
    Console.WriteLine("AddressWidth - {0}", mo["AddressWidth"]);
}

How to retrieve Printers Information in C#

To retrieve information about printers installed on the system:

PrinterSettings settings = new PrinterSettings();
foreach (string printer in PrinterSettings.InstalledPrinters)
{
     Console.WriteLine("Printer: {0}", printer);
}

WMI provides a powerful way to query system information on Windows machines. The queries shown (SELECT * FROM Win32_*) can be customized to fetch specific properties if needed.

How to retrieve Network Information in C#

To get information about the network interface in C#, you can use the NetworkInterface class from the System.Net.NetworkInformation namespace.

NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
if (interfaces == null || interfaces.Length < 1)
{
    Console.WriteLine("No network interfaces found.");
}
else
{
    foreach (NetworkInterface adapter in interfaces)
    {
        IPInterfaceProperties properties = adapter.GetIPProperties();
        Console.WriteLine(adapter.Description);
        Console.WriteLine(String.Empty.PadLeft(adapter.Description.Length, '='));
        Console.WriteLine("Interface type .......................... : {0}", adapter.NetworkInterfaceType);
        Console.WriteLine("Physical Address ........................ : {0}", adapter.GetPhysicalAddress().ToString());
        Console.WriteLine("Operational status ...................... : {0}", adapter.OperationalStatus);
    }
}

Use the NetworkInterface.GetAllNetworkInterfaces() method to retrieve an array of NetworkInterface objects representing all network interfaces on the machine.