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
: install libxrandr-dev
mkdir build && cd build
cmake .. -DPROBE_EXAMPLES=ON -DBUILD_SHARED_LIBS=ON
cmake --build . --config Release -j16