All Projects → Jinjinov → Hardware.Info

Jinjinov / Hardware.Info

Licence: MIT license
Battery, BIOS, CPU - processor, storage drive, keyboard, RAM - memory, monitor, motherboard, mouse, NIC - network adapter, printer, sound card - audio card, graphics card - video card. Hardware.Info is a .NET Standard 2.0 library and uses WMI on Windows, /dev, /proc, /sys on Linux and sysctl, system_profiler on macOS.

Programming Languages

C#
18002 projects

Projects that are alternatives of or similar to Hardware.Info

fuse-device
Use the basic Device functions such as UUID and current localization from Fuse
Stars: ✭ 13 (-94.54%)
Mutual labels:  device, information
AXIOM-Remote
A device to control AXIOM cameras.
Stars: ✭ 24 (-89.92%)
Mutual labels:  device, hardware
nanolinks
A curated link guide for finding anything about Nano; The fast, fee-less and green digital currency!
Stars: ✭ 25 (-89.5%)
Mutual labels:  information, info
Alsystemutilities
THIS REPO IS NO LONGER MAINTAINED! Check https://github.com/andrealufino/Luminous. This library provides a list of 80 methods to get every kind of system information!
Stars: ✭ 644 (+170.59%)
Mutual labels:  device, information
Luminous
Luminous provides you a lot of information about the system and a lot of handy methods to quickly get useful data on the iOS platform.
Stars: ✭ 298 (+25.21%)
Mutual labels:  device, hardware
SAMD TimerInterrupt
This library enables you to use Interrupt from Hardware Timers on an SAMD-based board. These SAMD Hardware Timers, using Interrupt, still work even if other functions are blocking. Moreover, they are much more precise (certainly depending on clock frequency accuracy) than other software timers using millis() or micros(). That's mandatory if you …
Stars: ✭ 28 (-88.24%)
Mutual labels:  device, hardware
indicium
Portable, advanced system information utility
Stars: ✭ 46 (-80.67%)
Mutual labels:  information, info
detect-gpu
Classifies GPUs based on their 3D rendering benchmark score allowing the developer to provide sensible default settings for graphically intensive applications.
Stars: ✭ 749 (+214.71%)
Mutual labels:  device, hardware
Detect Gpu
Classifies GPUs based on their 3D rendering benchmark score allowing the developer to provide sensible default settings for graphically intensive applications.
Stars: ✭ 460 (+93.28%)
Mutual labels:  device, hardware
Easydeviceinfo
📱 [Android Library] Get device information in a super easy way.
Stars: ✭ 1,698 (+613.45%)
Mutual labels:  device, information
Devicelayout
📱AutoLayout can be set differently for each device
Stars: ✭ 170 (-28.57%)
Mutual labels:  device
Device Detector Js
A precise user agent parser and device detector written in TypeScript
Stars: ✭ 193 (-18.91%)
Mutual labels:  device
generic-for-core
🏗️ Generic Repository & UOW Pattern For ASP.NET Core
Stars: ✭ 55 (-76.89%)
Mutual labels:  net-standard
audio-digitization-toolkit
A list of resources for setting up an audio digitization workflow
Stars: ✭ 13 (-94.54%)
Mutual labels:  hardware
Sriov Network Device Plugin
SRIOV network device plugin for Kubernetes
Stars: ✭ 157 (-34.03%)
Mutual labels:  device
devheart
Listen to Tux's heartbeat with this awesome Linux Kernel Module ❤️
Stars: ✭ 58 (-75.63%)
Mutual labels:  device
Apple Device Model List
All Apple devices model name list. 通过内部编号判断 iOS 设备型号。
Stars: ✭ 149 (-37.39%)
Mutual labels:  device
SDR Matlab LTE
📡 Using Software Designed Radio to transmit LTE downlink signals at 2.4 GHz
Stars: ✭ 21 (-91.18%)
Mutual labels:  hardware
basic-ecp5-pcb
Reference design for Lattice ECP5 FPGA. Featuring Raspberry Pi interface and 6 PMODs
Stars: ✭ 71 (-70.17%)
Mutual labels:  hardware
Hidguardian
Windows kernel-mode driver for controlling access to various input devices.
Stars: ✭ 138 (-42.02%)
Mutual labels:  device

Hardware.Info

Battery, BIOS, CPU - processor, storage drive, keyboard, RAM - memory, monitor, motherboard, mouse, NIC - network adapter, printer, sound card - audio card, graphics card - video card. Hardware.Info is a .NET Standard 2.0 library and uses WMI on Windows, /dev, /proc, /sys on Linux and sysctl, system_profiler on macOS.

How to use:

  1. Include NuGet package from https://www.nuget.org/packages/Hardware.Info

     <ItemGroup>
         <PackageReference Include="Hardware.Info" Version="10.1.1.1" />
     </ItemGroup>
    
  2. Call RefreshAll() or one of the other Refresh*() methods:

     class Program
     {
         static readonly IHardwareInfo hardwareInfo = new HardwareInfo();
    
         static void Main(string[] _)
         {
             //hardwareInfo.RefreshOperatingSystem();
             //hardwareInfo.RefreshMemoryStatus();
             //hardwareInfo.RefreshBatteryList();
             //hardwareInfo.RefreshBIOSList();
             //hardwareInfo.RefreshCPUList();
             //hardwareInfo.RefreshDriveList();
             //hardwareInfo.RefreshKeyboardList();
             //hardwareInfo.RefreshMemoryList();
             //hardwareInfo.RefreshMonitorList();
             //hardwareInfo.RefreshMotherboardList();
             //hardwareInfo.RefreshMouseList();
             //hardwareInfo.RefreshNetworkAdapterList();
             //hardwareInfo.RefreshPrinterList();
             //hardwareInfo.RefreshSoundDeviceList();
             //hardwareInfo.RefreshVideoControllerList();
    
             hardwareInfo.RefreshAll();
    
             Console.WriteLine(hardwareInfo.OperatingSystem);
    
             Console.WriteLine(hardwareInfo.MemoryStatus);
    
             foreach (var hardware in hardwareInfo.BatteryList)
                 Console.WriteLine(hardware);
    
             foreach (var hardware in hardwareInfo.BiosList)
                 Console.WriteLine(hardware);
    
             foreach (var cpu in hardwareInfo.CpuList)
             {
                 Console.WriteLine(cpu);
    
                 foreach (var cpuCore in cpu.CpuCoreList)
                     Console.WriteLine(cpuCore);
             }
    
             Console.ReadLine();
    
             foreach (var drive in hardwareInfo.DriveList)
             {
                 Console.WriteLine(drive);
    
                 foreach (var partition in drive.PartitionList)
                 {
                     Console.WriteLine(partition);
    
                     foreach (var volume in partition.VolumeList)
                         Console.WriteLine(volume);
                 }
             }
    
             Console.ReadLine();
    
             foreach (var hardware in hardwareInfo.KeyboardList)
                 Console.WriteLine(hardware);
    
             foreach (var hardware in hardwareInfo.MemoryList)
                 Console.WriteLine(hardware);
    
             foreach (var hardware in hardwareInfo.MonitorList)
                 Console.WriteLine(hardware);
    
             foreach (var hardware in hardwareInfo.MotherboardList)
                 Console.WriteLine(hardware);
    
             foreach (var hardware in hardwareInfo.MouseList)
                 Console.WriteLine(hardware);
    
             foreach (var hardware in hardwareInfo.NetworkAdapterList)
                 Console.WriteLine(hardware);
    
             foreach (var hardware in hardwareInfo.PrinterList)
                 Console.WriteLine(hardware);
    
             foreach (var hardware in hardwareInfo.SoundDeviceList)
                 Console.WriteLine(hardware);
    
             foreach (var hardware in hardwareInfo.VideoControllerList)
                 Console.WriteLine(hardware);
    
             Console.ReadLine();
    
             foreach (var address in HardwareInfo.GetLocalIPv4Addresses(NetworkInterfaceType.Ethernet, OperationalStatus.Up))
                 Console.WriteLine(address);
    
             Console.WriteLine();
    
             foreach (var address in HardwareInfo.GetLocalIPv4Addresses(NetworkInterfaceType.Wireless80211))
                 Console.WriteLine(address);
    
             Console.WriteLine();
    
             foreach (var address in HardwareInfo.GetLocalIPv4Addresses(OperationalStatus.Up))
                 Console.WriteLine(address);
    
             Console.WriteLine();
    
             foreach (var address in HardwareInfo.GetLocalIPv4Addresses())
                 Console.WriteLine(address);
    
             Console.ReadLine();
         }
     }
    

Known issues

21 second delay on first use in Windows

Hardware.Info uses WMI (Windows Management Instrumentation) on Windows OS. For certain queries WMI takes 21 seconds to initialize the first time you use it, after that all subsequent queries will execute immediately. If WMI isn't used for 15 minutes it will have to be initialized again the next time you use it.

The 21 second initialization delay is caused by RPC that WMI uses internally. In RPC documentation it says that the RPC/TCP time-out interval is defined with a SCMApiConnectionParam registry value located at HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control and that the default value is set to 21,000 (21 seconds).

You can avoid the 21 second delay by excluding the queries that cause it (see Settings).

Settings

Constructor settings:

HardwareInfo(bool useAsteriskInWMI = true, TimeSpan? timeoutInWMI = null)

The construcotr accepts two settings for WMI:

  • useAsteriskInWMI causes WMI queries to use SELECT * FROM instead of SELECT with a list of property names. This is slower, but safer, more compatible with older Windows (XP, Vista, 7, 8) where a certain WMI property might be missing and throw an exception when queried by name. The default value is true.
  • timeoutInWMI sets the Timeout property of the EnumerationOptions in the ManagementObjectSearcher that executes the query. The default value is EnumerationOptions.InfiniteTimeout. Changing this could cause the query to return empty results in certain cases.

Refresh methods settings:

In these two methods you can exclude some slow queries by setting the parameters to false:

RefreshCPUList(bool includePercentProcessorTime = true)

RefreshNetworkAdapterList(bool includeBytesPersec = true, bool includeNetworkAdapterConfiguration = true)

Setting includePercentProcessorTime and includeBytesPersec to false will exclude the queries that:

  • cause a 21 second delay the first time they are called in Windows
  • cause a 1 second delay every time they are called in Linux

Setting includeNetworkAdapterConfiguration to false has only a small impact on performance.

Benchmarks

Windows 8.1 (Intel i5-2500, 8 GB RAM):

Method Mean Error StdDev
RefreshMemoryStatus 947.8 ns 3.77 ns 3.53 ns
RefreshBatteryList 1,811,885.7 ns 12,921.05 ns 11,454.17 ns
RefreshBIOSList 2,086,001.0 ns 23,896.69 ns 22,352.98 ns
RefreshCPUList 1,543,579,005.2 ns 2,405,376.47 ns 2,132,303.59 ns
RefreshDriveList 409,137,516.3 ns 8,612,410.99 ns 25,258,710.57 ns
RefreshKeyboardList 5,568,039.5 ns 44,228.57 ns 41,371.43 ns
RefreshMemoryList 2,120,024.5 ns 26,103.39 ns 24,417.13 ns
RefreshMonitorList 5,669,237.8 ns 50,801.76 ns 45,034.44 ns
RefreshMotherboardList 1,965,222.9 ns 14,387.30 ns 13,457.89 ns
RefreshMouseList 6,003,924.9 ns 60,725.05 ns 50,708.17 ns
RefreshNetworkAdapterList 1,412,244,738.6 ns 14,681,615.28 ns 12,259,813.69 ns
RefreshPrinterList 28,244,822.2 ns 143,359.60 ns 134,098.66 ns
RefreshSoundDeviceList 3,608,577.5 ns 68,688.62 ns 73,496.06 ns
RefreshVideoControllerList 11,568,549.2 ns 54,666.07 ns 48,460.05 ns

Windows 10 (AMD Ryzen 5 5600G, 32 GB RAM):

Method Mean Error StdDev
RefreshOperatingSystem 2.946 ns 0.0052 ns 0.0047 ns
RefreshMemoryStatus 460.552 ns 4.4810 ns 3.9723 ns
RefreshBatteryList 1,624,392.057 ns 22,526.9314 ns 21,071.7057 ns
RefreshBIOSList 1,785,673.828 ns 8,812.8115 ns 8,243.5094 ns
RefreshCPUList 1,964,995,539.000 ns 171,465,934.5051 ns 505,571,176.5574 ns
RefreshDriveList 62,452,668.148 ns 342,662.0413 ns 320,526.2860 ns
RefreshKeyboardList 4,303,528.516 ns 47,355.1733 ns 41,979.1277 ns
RefreshMemoryList 1,926,931.367 ns 19,754.4179 ns 18,478.2948 ns
RefreshMonitorList 3,884,362.370 ns 29,422.1438 ns 27,521.4916 ns
RefreshMotherboardList 1,782,235.664 ns 12,974.2296 ns 12,136.1024 ns
RefreshMouseList 4,700,086.615 ns 44,435.0631 ns 41,564.5856 ns
RefreshNetworkAdapterList 945,004,493.333 ns 8,568,978.4607 ns 8,015,427.7687 ns
RefreshPrinterList 48,126,103.030 ns 729,958.0933 ns 682,803.2534 ns
RefreshSoundDeviceList 4,154,082.924 ns 46,922.5501 ns 41,595.6184 ns
RefreshVideoControllerList 8,784,372.500 ns 125,080.5212 ns 117,000.3971 ns

Version history:

  • 10.1.1.1:
  • 10.1.1.0:
    • Fixed GetCpuUsage in Linux - thanks to @glebov21
  • 10.1.0.1:
  • 10.1.0.0:
    • Fixed PercentProcessorTime in Windows - thanks to @C6OI
  • 10.0.1.1:
    • Added GetOperatingSystem() in Windows, macOS, Linux - thanks to @adhip94
  • 10.0.1.0:
  • 10.0.0.1:
  • 10.0.0.0:
    • Fixed GetDriveList() and GetMemoryList() in Linux - thanks to @misaka00251
  • 1.1.1.1:
    • Added Memory.BankLabel, Memory.MinVoltage, Memory.MaxVoltage in Windows - by @AathifMahir
    • Added CPU.SocketDesignation, CPU.SecondLevelAddressTranslationExtensions in Windows - by @AathifMahir
    • Added Windows version check for WMI properties that require at least Windows 8
    • Added Windows version check for WMI properties that require at least Windows 10
    • Added XML summary for public properties in every class.
  • 1.1.1.0:
    • Added IHardwareInfo so that HardwareInfo can be mocked - by @240026763
  • 1.1.0.1:
    • Added two settings for WMI queries in Windows
    • Added three settings to exclude slow queries in Windows, macOS, Linux
  • 1.1.0.0:
    • Fixed reading MemAvailable instead of MemFree in Linux - by @schotime
  • 1.0.1.1:
    • Added CpuCore info in Linux - by @isenmann
    • Added CPU.PercentProcessorTime, CPU.CpuCoreList in Linux - by @isenmann
  • 1.0.1.0:
    • Added CpuCore info in Windows - by @isenmann
    • Added CPU.PercentProcessorTime, CPU.CpuCoreList in Windows - by @isenmann
    • Added NetworkAdapter.BytesSentPersec, NetworkAdapter.BytesReceivedPersec in Windows - by @isenmann
  • 1.0.0.1:
    • Added Battery.EstimatedChargeRemaining in Windows, Linux - by @reptail
  • 1.0.0.0:
    • Added Battery.ExpectedLife in Linux
    • Added Battery.EstimatedRunTime in Linux
    • Added Battery.MaxRechargeTime in Linux
    • Added Battery.TimeToFullCharge in Linux
  • 0.1.1.1:
    • Added Battery.DesignCapacity in Linux
    • Added Battery.FullChargeCapacity in Linux
  • 0.1.1.0:
    • Added Battery.BatteryStatusDescription in Linux
  • 0.1.0.1:
    • Added Monitor info in macOS
    • Added VideoController info in macOS
  • 0.1.0.0:
    • Added CPU.L2CacheSize in macOS
    • Added CPU.L3CacheSize in macOS
    • Added Memory info in macOS
  • 0.0.1.1:
    • Added BIOS.ReleaseDate in Linux
    • Added CPU.Manufacturer in Linux
    • Added CPU.L3CacheSize in Linux
    • Added Motherboard.SerialNumber in Linux
    • Fixed NetworkAdapter info in Linux
    • Fixed GetLocalIPv4Addresses() in macOS
  • 0.0.1.0:
    • Added GetLocalIPv4Addresses() in Windows, macOS, Linux
    • Added Motherboard.SerialNumber in Windows
    • Added Drive, NetworkAdapter info in macOS, Linux
  • 0.0.0.1:
    • All hardware info in Windows
    • CPU, RAM info in macOS, Linux
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].