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++ 20
CMake >= 3.16
Windows >= 10 1607
Linux
: installlibxrandr-dev
mkdir build && cd build
cmake .. -DPROBE_EXAMPLES=ON -DBUILD_SHARED_LIBS=ON
cmake --build . --config Release -j16