Hardware and OS information library for C++
Probe contains several modules to probe the hardware & software information, including system, cpu, graphics, process, network, disk, media device and so on, it is simple to use like:
#include "probe/system.h"
#include "probe/memory.h"
#include "probe/util.h"
#include <iostream>
int main()
{
const auto mem = probe::memory::status();
std::cout << "Operating System:\n"
<< " System Name : " << probe::system::name() << '\n'
<< " System Version : " << probe::to_string(probe::system::version()) << '\n'
<< " Kernel Name : " << probe::system::kernel::name() << '\n'
<< " Kernel Version : " << probe::to_string(probe::system::kernel::version()) << '\n'
<< " Device Name : " << probe::system::hostname() << '\n'
<< " Theme : " << probe::to_string(probe::system::theme()) << '\n'
<< " Desktop ENV : " << probe::to_string(probe::system::desktop_environment()) << " ("
<< probe::to_string(probe::system::desktop_environment_version()) << ")\n"
<< " Windowing System : " << probe::to_string(probe::system::windowing_system()) << '\n'
<< " Memory : " << probe::util::GB(mem.avail) << " / "
<< probe::util::GB(mem.total) << " GB\n";
return 0;
}Output:
Operating System: Operating System:
System Name : Windows 11 Pro | System Name : Ubuntu 22.04.3 LTS
System Version : 10.0.26058-1000 (24H2) | System Version : 22.4.3 (jammy)
Kernel Name : Windows NT | Kernel Name : Linux
Kernel Version : 10.0.26058-1000 | Kernel Version : 6.5.0-18 (generic)
Device Name : EVA-0 | Device Name : EVA-2204
Theme : dark | Theme : light
Desktop ENV : Windows Shell (10.0.26058-1000 (24H2)) | Desktop ENV : GNOME (42.9.0)
Windowing System : Desktop Window Manager | Windowing System : X11
Memory : 4.62131 / 31.9358 GB | Memory : 11.8134 / 15.5742 GB| properties | Windows | Linux | commments |
|---|---|---|---|
| os name | ✔ | ✔ | Windows 11 Pro |
| os version | ✔ | ✔ | 10.0.25346.1001(22H2) |
| kernel name | ✔ | ✔ | Windows NT |
| kernel version | ✔ | ✔ | 10.0.25346.1001 |
| hostname | ✔ | ✔ | Device Name/Computer Name |
| username | ✔ | ✔ | Name of Current User |
| dark/light mode | ✔ | Ubuntu 22.04 |
dark |
| desktop environment | Windows Shell |
✔ | GNOME / Unity / Cinnamon / KDE / Xfce / MATE |
| DE version | same as os version | ✔ | GNOME (3.28.2.0) / Unity / Cinnamon / KDE |
| windowing system | DWM |
✔ | DWM / X11 / Wayland |
| memory | ✔ | ✔ | 15.29 / 31.94 GB |
| properties | Windows | Linux | commments |
|---|---|---|---|
| name | ✔ | ✔ | Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz |
| vendor | ✔ | ✔ | GenuineIntel |
| sockets | ✔ | ✔ | 1 |
| cores | ✔ | ✔ | 8 |
| logical cores | ✔ | ✔ | 8 |
| base frequency | ✔ | ✔ | 3.6 GHz |
| architecture | ✔ | ✔ | x64 |
| endianness | ✔ | ✔ | little |
| CPUID/features | ✔ | ✔ | check features of CPU by cpuid |
| L1 Data cache | ✔ | ✔ | 8 x 32 KB |
| L1 Inst. cache | ✔ | ✔ | 8 x 32 KB |
| L2 cache | ✔ | ✔ | 8 x 256 KB |
| L3 cache | ✔ | ✔ | 12 MB |
| properties | Windows | Linux | commments |
|---|---|---|---|
| name | ✔ | ✔ | NVIDIA GeForce RTX 2080 |
| vendor | ✔ | ✔ | NVIDIA Corporation |
| dedicated memory | ✔ | 8390705152 B | |
| shared memory | ✔ | 17146988544 B | |
| frequency |
| properties | Windows | Linux | commments |
|---|---|---|---|
| name | ✔ | ✔ | "AOC2790" |
| id | ✔ | same as name | "\.\DISPLAY1" |
| primary | ✔ | ✔ | true / false |
| position | ✔ | ✔ | (-2560, -1440) |
| resolution | ✔ | ✔ | 2560 x 1440 |
| refresh rate | ✔ | ✔ | 59.9 Hz |
| BPP | ✔ | ✔ | 32 |
| logical DPI | >=Windows 10 1607 |
✔ | 96 |
| scale factor | ✔ | 125% | |
| orientation | ✔ | ✔ | Landscape |
| physical size | ✔ | 60 x 34 cm | |
| physical DPI | ✔ | 108 |
the desktop containing all displays
| properties | Windows | Linux | commments |
|---|---|---|---|
| position | ✔ | ✔ | (-1920, -1080) |
| resolution | ✔ | ✔ | 4480 x 2520 |
The position of the display can be negative on windows since the primary display always start at (0, 0)
Z-order: up to down
| properties | Windows | Linux | commments |
|---|---|---|---|
| name | ✔ | ✔ | "README.md - probe - Visual Studio Code" |
| classname | ✔ | ✔ | "Chrome_WidgetWin_1" |
| geometry | ✔ | ✔ | (741, 328), 1568 x 995 |
| navtive handle | ✔ | ✔ | Windows: HWND, Linux: Window |
| parent handle | ✔ | ✔ | |
| visible | ✔ | ✔ | true / false |
| process id | ✔ | ✔ | |
| process name | ✔ | ✔ | explorer.exe |
Run as Administrator
| properties | Windows | Linux | commments |
|---|---|---|---|
| name | ✔ | ✔ | \\.\PhysicalDrive2 |
| path | ✔ | ✔ | \\?\scsi#disk&ven_phi&prod_h1#6&314c6ca8&0&000000#{53f56307-b6bf-11d0-94f2-00a0c91efb8b} |
| serial number | ✔ | ✔ | 98BB9969766F |
| GUID/signature | ✔ | {C65630B2-E183-4363-9E18-93CE442B9515} (GPT) or 9BD1A50 (MBR) | |
| vendor | ✔ | ✔ | Samsung |
| product | ✔ | ✔ | Samsung SSD 970 EVO Plus |
| bus type | ✔ | ✔ | SATA / NVMe / USB ... |
| removable | ✔ | true / false | |
| writable | ✔ | true / false | |
| trim | ✔ | true / false | |
| cylinders | ✔ | 121601 | |
| tracks/cylinders | ✔ | 255 | |
| sectors/track | ✔ | 63 | |
| bytes/sector | ✔ | 512 | |
| partitions | ✔ | 6 |
| properties | Windows | Linux | commments |
|---|---|---|---|
| name | ✔ | Microsoft reserved partition | |
| style | ✔ | GPT / MBR / RAW | |
| type id | ✔ | {E3C9E316-0B5C-4DB8-817D-F92DF00215AE} | |
| GUID | ✔ | {733189C5-6252-4F42-9577-151494026B2B} | |
| offset | ✔ | 17408 | |
| length | ✔ | 16759808 |
| properties | Windows | Linux | commments |
|---|---|---|---|
| label | ✔ | New Volume | |
| letter | ✔ | C:\ | |
| filesystem | ✔ | NTFS | |
| serial number | ✔ | 10194AA9 | |
| GUID path | ✔ | \\?\Volume{803b42f7-bbee-4d30-ad22-2d0fe90072b6}\ | |
| capacity | ✔ | 1870.54 GB | |
| free space | ✔ | 105.929 GB |
| properties | Windows | Linux | commments |
|---|---|---|---|
| name | ✔ | Logi C310 HD WebCam | |
| vendor | |||
| id | ✔ | {0.0.1.00000000}.{d6224b54-e7f7-49d9-ab10-b2071cb4eea5} | |
| description | ✔ | Microphone | |
| type | ✔ | AudioSource | |
| state | ✔ | Active |
| properties | Windows | Linux | commments |
|---|---|---|---|
| pid | ✔ | ✔ | process id |
| ppid | ✔ | ✔ | pid of parent process |
| state | - | ✔ | R, S, D, Z, T, t, X |
| priority | ✔ | ✔ | |
| name | ✔ | ✔ | Win: "xxx.exe", Linux: "xxx" |
| path | ✔ | ✔ | "C:\path\to\file.exe" |
| cmdline | ✔ | ||
| starttime | ✔ | ✔ | unix time, ns |
| nb_threads | ✔ | ✔ | |
| user | ✔ | ✔ | username |
| properties | Windows | Linux | commments |
|---|---|---|---|
| name (get) | ✔ | ✔ | get name of the thread |
| name (set) | ✔ | ✔ | set name of the thread |
Parse the following files:
- /proc/uptime
- /proc/[pid]/exe
- /proc/[pid]/stat
- /proc/[pid]/status
- /proc/[pid]/statm
- /proc/[pid]/cmdline
| properties | Windows | Linux | commments |
|---|---|---|---|
| name | ✔ | ✔ | Windows: Intel(R) Ethernet Connection (7) I219-V; Linux: eno1 |
| vendor id | (PCI Bus) | ✔ | 0x0123 |
| product | (PCI Bus) | ✔ | Ethernet Connection (7) I219-V |
| guid | ✔ | - | {FFE7027E-6386-11EB-95F5-806E6F6E6963} |
| interface guid | ✔ | {653D76BA-C95E-4A46-A3D6-A178841A7AC8} | |
| description | ✔ | ✔ | Ethernet |
| manufacturer | ✔ | ✔ | Intel |
| enabled | ✔ | true/false | |
| bus | (PCI Bus) | ✔ | PCI / USB... |
| bus_info | (PCI Bus) | ||
| driver | ✔ | ✔ | |
| driver version | ✔ | ✔ | |
| virtual | ✔ | ✔ | true / false, guessed by physical address and the description |
| type | ✔ | ✔ | Ethernet / IEEE 802.11 / ... |
| physical address (MAC) | ✔ | ✔ | 00:50:56:C0:00:01 |
| DHCP Enabled | ✔ | true | |
| MTU | ✔ | ✔ | 1500 |
| ipv4_addresses | ✔ | ✔ | 192.168.189.1 |
| ipv6_addresses | ✔ | ✔ | fe80::22bc:b757:c253:a7c8 |
| dhcpv4_server | ✔ | ||
| dhcpv6_server | ✔ | ||
| ipv4_gateways | ✔ | ||
| ipv6_gateways | ✔ | ||
| dns_suffix | ✔ | ||
| ipv4_dns_servers | ✔ | ||
| ipv6_dns_servers | ✔ |
| properties | Windows | Linux | commments |
|---|---|---|---|
| guid | ✔ | interface guid | |
| ibytes | ✔ | ||
| obytes | ✔ | ||
| unicast ibytes | ✔ | ||
| unicast obytes | ✔ | ||
| broadcast ibytes | ✔ | ||
| broadcast obytes | ✔ | ||
| multicast ibytes | ✔ | ||
| multicast obytes | ✔ |
| properties | Windows | Linux | commments |
|---|---|---|---|
| name | ✔ | Windows: COM1 | |
| instance id | ✔ | Windows: Device Instance ID | |
| description | ✔ | ||
| manufacturer | ✔ |
| functions | Windows | Linux | commments |
|---|---|---|---|
| to_utf8 | ✔ | wchar -> utf8 | |
| to_utf16 | ✔ | utf8 -> wchar | |
| trim | ✔ | ✔ | trim string |
| functions / classes | commments |
|---|---|
| registry::read | read value of the registry key |
| registry::RegistryListener | listen change events of the registry key |
| functions / classes | commments |
|---|---|
| exec_sync | execute a commond and return the standard output |
| pipe_open/pipe_close | execute a commond and redirect the standard output to the pipe |
| PipeListener | listen the pipe of the the executed commond |
| gsettings functions | wrapper to gsettings commond |
C++ 20CMake >= 3.16Windows >= 10 1607Linux: installlibxrandr-dev
mkdir build && cd build
cmake .. -DPROBE_EXAMPLES=ON -DBUILD_SHARED_LIBS=ON
cmake --build . --config Release -j16