java获取系统信息
导入maven依赖
<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId>
</dependency>
测试类
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import oshi.SystemInfo;
import oshi.hardware.*;
import oshi.hardware.CentralProcessor.TickType;
import oshi.software.os.*;
import oshi.software.os.OperatingSystem.ProcessSort;
import oshi.util.FormatUtil;
import oshi.util.Util;
import java.util.Arrays;
import java.util.List;
public class SystemInfoTest {
public static void main(String[] args) {
Logger LOG = LoggerFactory.getLogger(SystemInfoTest.class);
LOG.info("创建systemInfo对象...");
SystemInfo si = new SystemInfo();
LOG.info("创建硬件对象Hardware...");
HardwareAbstractionLayer hal = si.getHardware();
LOG.info("创建硬件对象Hardware...");
OperatingSystem os = si.getOperatingSystem();
System.out.println("操作系统:"+os);
LOG.info("正在获取cup信息...");
printComputerSystem(hal.getComputerSystem());
LOG.info("处理器信息...");
printProcessor(hal.getProcessor());
LOG.info("获取内存信息...");
printMemory(hal.getMemory());
LOG.info("获取cup信息...");
printCpu(hal.getProcessor());
LOG.info("获取进程...");
printProcesses(os, hal.getMemory());
LOG.info("传感器...");
printSensors(hal.getSensors());
LOG.info("电源...");
printPowerSources(hal.getPowerSources());
LOG.info("检查磁盘...");
printDisks(hal.getDiskStores());
LOG.info("检查文件系统...");
printFileSystem(os.getFileSystem());
LOG.info("检查网络接口...");
printNetworkInterfaces(hal.getNetworkIFs());
LOG.info("检查网络参数...");
printNetworkParameters(os.getNetworkParams());
LOG.info("检查显示...");
printDisplays(hal.getDisplays());
LOG.info("检查USB设备...");
printUsbDevices(hal.getUsbDevices(true));
}
private static void printComputerSystem(final ComputerSystem computerSystem) {
System.out.println("制造商: " + computerSystem.getManufacturer());
System.out.println("型号: " + computerSystem.getModel());
System.out.println("序列号: " + computerSystem.getSerialNumber());
final Firmware firmware = computerSystem.getFirmware();
System.out.println("固件信息:");
System.out.println(" 制造商: " + firmware.getManufacturer());
System.out.println(" 名字: " + firmware.getName());
System.out.println(" 描述: " + firmware.getDescription());
System.out.println(" 版本: " + firmware.getVersion());
final Baseboard baseboard = computerSystem.getBaseboard();
System.out.println("baseboard:");
System.out.println(" 制造商: " + baseboard.getManufacturer());
System.out.println(" 型号: " + baseboard.getModel());
System.out.println(" 版本: " + baseboard.getVersion());
System.out.println(" 序列号: " + baseboard.getSerialNumber());
}
private static void printProcessor(CentralProcessor processor) {
System.out.println(processor);
System.out.println(" " + processor.getPhysicalPackageCount() + " (物理CPU封装)physical CPU package(s)");
System.out.println(" " + processor.getPhysicalProcessorCount() + " (物理CPU核心)physical CPU core(s)");
System.out.println(" " + processor.getLogicalProcessorCount() + " (物理CPU核心)logical CPU(s)");
System.out.println("(识别)Identifier: " + processor.getIdentifier());
System.out.println("(处理器ID)ProcessorID: " + processor.getProcessorID());
}
private static void printMemory(GlobalMemory memory) {
System.out.println("(内存)Memory: " + FormatUtil.formatBytes(memory.getAvailable()) + "/"
+ FormatUtil.formatBytes(memory.getTotal()));
System.out.println("(交换使用)Swap used: " + FormatUtil.formatBytes(memory.getSwapUsed()) + "/"
+ FormatUtil.formatBytes(memory.getSwapTotal()));
}
private static void printCpu(CentralProcessor processor) {
System.out.println("(正常运行时间)Uptime: " + FormatUtil.formatElapsedSecs(processor.getSystemUptime()));
System.out.println(
"(上下文切换/中断)Context Switches/Interrupts: " + processor.getContextSwitches() + " / " + processor.getInterrupts());
long[] prevTicks = processor.getSystemCpuLoadTicks();
System.out.println("(等待)CPU, IOWait, and IRQ ticks @ 0 sec:" + Arrays.toString(prevTicks));
Util.sleep(1000);
long[] ticks = processor.getSystemCpuLoadTicks();
System.out.println("CPU, IOWait, and IRQ ticks @ 1 sec:" + Arrays.toString(ticks));
long user = ticks[TickType.USER.getIndex()] - prevTicks[TickType.USER.getIndex()];
long nice = ticks[TickType.NICE.getIndex()] - prevTicks[TickType.NICE.getIndex()];
long sys = ticks[TickType.SYSTEM.getIndex()] - prevTicks[TickType.SYSTEM.getIndex()];
long idle = ticks[TickType.IDLE.getIndex()] - prevTicks[TickType.IDLE.getIndex()];
long iowait = ticks[TickType.IOWAIT.getIndex()] - prevTicks[TickType.IOWAIT.getIndex()];
long irq = ticks[TickType.IRQ.getIndex()] - prevTicks[TickType.IRQ.getIndex()];
long softirq = ticks[TickType.SOFTIRQ.getIndex()] - prevTicks[TickType.SOFTIRQ.getIndex()];
long steal = ticks[TickType.STEAL.getIndex()] - prevTicks[TickType.STEAL.getIndex()];
long totalCpu = user + nice + sys + idle + iowait + irq + softirq + steal;
System.out.format(
"User: %.1f%% Nice: %.1f%% System: %.1f%% Idle: %.1f%% IOwait: %.1f%% IRQ: %.1f%% SoftIRQ: %.1f%% Steal: %.1f%%%n",
100d * user / totalCpu, 100d * nice / totalCpu, 100d * sys / totalCpu, 100d * idle / totalCpu,
100d * iowait / totalCpu, 100d * irq / totalCpu, 100d * softirq / totalCpu, 100d * steal / totalCpu);
System.out.format("(cup使用率)CPU load: %.1f%% (counting ticks)%n", processor.getSystemCpuLoadBetweenTicks() * 100);
System.out.format("CPU load: %.1f%% (OS MXBean)%n", processor.getSystemCpuLoad() * 100);
double[] loadAverage = processor.getSystemLoadAverage(3);
System.out.println("(平均CPU负载)CPU load averages:" + (loadAverage[0] < 0 ? " N/A" : String.format(" %.2f", loadAverage[0]))
+ (loadAverage[1] < 0 ? " N/A" : String.format(" %.2f", loadAverage[1]))
+ (loadAverage[2] < 0 ? " N/A" : String.format(" %.2f", loadAverage[2])));
StringBuilder procCpu = new StringBuilder("每个处理器的CPU负载:");
double[] load = processor.getProcessorCpuLoadBetweenTicks();
for (double avg : load) {
procCpu.append(String.format(" %.1f%%", avg * 100));
}
System.out.println(procCpu.toString());
}
private static void printProcesses(OperatingSystem os, GlobalMemory memory) {
System.out.println("(进程)Processes: " + os.getProcessCount() + ", (线程)Threads: " + os.getThreadCount());
List<OSProcess> procs = Arrays.asList(os.getProcesses(5, ProcessSort.CPU));
System.out.println(" PID %CPU %MEM VSZ RSS Name");
for (int i = 0; i < procs.size() && i < 5; i++) {
OSProcess p = procs.get(i);
System.out.format(" %5d %5.1f %4.1f %9s %9s %s%n", p.getProcessID(),
100d * (p.getKernelTime() + p.getUserTime()) / p.getUpTime(),
100d * p.getResidentSetSize() / memory.getTotal(), FormatUtil.formatBytes(p.getVirtualSize()),
FormatUtil.formatBytes(p.getResidentSetSize()), p.getName());
}
}
private static void printSensors(Sensors sensors) {
System.out.println("(传感器)Sensors:");
System.out.format(" (CPU温度)CPU Temperature: %.1f°C%n", sensors.getCpuTemperature());
System.out.println(" (风扇转速)Fan Speeds: " + Arrays.toString(sensors.getFanSpeeds()));
System.out.format(" (CPU电压)CPU Voltage: %.1fV%n", sensors.getCpuVoltage());
}
private static void printPowerSources(PowerSource[] powerSources) {
StringBuilder sb = new StringBuilder("(电源)Power: ");
if (powerSources.length == 0) {
sb.append("(未知)Unknown");
} else {
double timeRemaining = powerSources[0].getTimeRemaining();
if (timeRemaining < -1d) {
sb.append("(充电)Charging");
} else if (timeRemaining < 0d) {
sb.append("(计算剩余时间)Calculating time remaining");
} else {
sb.append(String.format("%d:%02d remaining", (int) (timeRemaining / 3600),
(int) (timeRemaining / 60) % 60));
}
}
for (PowerSource pSource : powerSources) {
sb.append(String.format("%n %s @ %.1f%%", pSource.getName(), pSource.getRemainingCapacity() * 100d));
}
System.out.println(sb.toString());
}
private static void printDisks(HWDiskStore[] diskStores) {
System.out.println("(硬盘)Disks:");
for (HWDiskStore disk : diskStores) {
boolean readwrite = disk.getReads() > 0 || disk.getWrites() > 0;
System.out.format(" %s: (model: %s - S/N: %s) size: %s, reads: %s (%s), writes: %s (%s), xfer: %s ms%n",
disk.getName(), disk.getModel(), disk.getSerial(),
disk.getSize() > 0 ? FormatUtil.formatBytesDecimal(disk.getSize()) : "?",
readwrite ? disk.getReads() : "?", readwrite ? FormatUtil.formatBytes(disk.getReadBytes()) : "?",
readwrite ? disk.getWrites() : "?", readwrite ? FormatUtil.formatBytes(disk.getWriteBytes()) : "?",
readwrite ? disk.getTransferTime() : "?");
HWPartition[] partitions = disk.getPartitions();
if (partitions == null) {
continue;
}
for (HWPartition part : partitions) {
System.out.format(" |-- %s: %s (%s) Maj:Min=%d:%d, size: %s%s%n", part.getIdentification(),
part.getName(), part.getType(), part.getMajor(), part.getMinor(),
FormatUtil.formatBytesDecimal(part.getSize()),
part.getMountPoint().isEmpty() ? "" : " @ " + part.getMountPoint());
}
}
}
private static void printFileSystem(FileSystem fileSystem) {
System.out.println("(文件系统)File System:");
System.out.format(" (文件描述)File Descriptors: %d/%d%n", fileSystem.getOpenFileDescriptors(),
fileSystem.getMaxFileDescriptors());
OSFileStore[] fsArray = fileSystem.getFileStores();
for (OSFileStore fs : fsArray) {
long usable = fs.getUsableSpace();
long total = fs.getTotalSpace();
System.out.format(
" %s (%s) [%s] %s of %s free (%.1f%%) is %s "
+ (fs.getLogicalVolume() != null && fs.getLogicalVolume().length() > 0 ? "[%s]" : "%s")
+ " and is mounted at %s%n",
fs.getName(), fs.getDescription().isEmpty() ? "file system" : fs.getDescription(), fs.getType(),
FormatUtil.formatBytes(usable), FormatUtil.formatBytes(fs.getTotalSpace()), 100d * usable / total,
fs.getVolume(), fs.getLogicalVolume(), fs.getMount());
}
}
private static void printNetworkInterfaces(NetworkIF[] networkIFs) {
System.out.println("(网络接口)Network interfaces:");
for (NetworkIF net : networkIFs) {
System.out.format(" Name: %s (%s)%n", net.getName(), net.getDisplayName());
System.out.format(" MAC Address: %s %n", net.getMacaddr());
System.out.format(" MTU: %s, Speed: %s %n", net.getMTU(), FormatUtil.formatValue(net.getSpeed(), "bps"));
System.out.format(" IPv4: %s %n", Arrays.toString(net.getIPv4addr()));
System.out.format(" IPv6: %s %n", Arrays.toString(net.getIPv6addr()));
boolean hasData = net.getBytesRecv() > 0 || net.getBytesSent() > 0 || net.getPacketsRecv() > 0
|| net.getPacketsSent() > 0;
System.out.format(" Traffic: received %s/%s%s; transmitted %s/%s%s %n",
hasData ? net.getPacketsRecv() + " packets" : "?",
hasData ? FormatUtil.formatBytes(net.getBytesRecv()) : "?",
hasData ? " (" + net.getInErrors() + " err)" : "",
hasData ? net.getPacketsSent() + " packets" : "?",
hasData ? FormatUtil.formatBytes(net.getBytesSent()) : "?",
hasData ? " (" + net.getOutErrors() + " err)" : "");
}
}
private static void printNetworkParameters(NetworkParams networkParams) {
System.out.println("Network parameters:");
System.out.format(" (主机名)Host name: %s%n", networkParams.getHostName());
System.out.format(" (域名)Domain name: %s%n", networkParams.getDomainName());
System.out.format(" (DNS服务器)DNS servers: %s%n", Arrays.toString(networkParams.getDnsServers()));
System.out.format(" (IPv4网关)IPv4 Gateway: %s%n", networkParams.getIpv4DefaultGateway());
System.out.format(" (IPv6网关)IPv6 Gateway: %s%n", networkParams.getIpv6DefaultGateway());
}
private static void printDisplays(Display[] displays) {
System.out.println("(显示器)Displays:");
int i = 0;
for (Display display : displays) {
System.out.println(" Display " + i + ":");
System.out.println(display.toString());
i++;
}
}
private static void printUsbDevices(UsbDevice[] usbDevices) {
System.out.println("(usb设备)USB Devices:");
for (UsbDevice usbDevice : usbDevices) {
System.out.println(usbDevice.toString());
}
}
}
运行结果
16:56:28.633 [main] INFO c.r.w.c.t.SystemInfoTest - [main,33] - 创建systemInfo对象...
16:56:28.641 [main] INFO c.r.w.c.t.SystemInfoTest - [main,36] - 创建硬件对象Hardware...
16:56:28.646 [main] INFO c.r.w.c.t.SystemInfoTest - [main,39] - 创建硬件对象Hardware...
操作系统:Microsoft Windows 10 (Home) build 18363
16:56:29.890 [main] INFO c.r.w.c.t.SystemInfoTest - [main,44] - 正在获取cup信息...
制造商: Timi
型号: TM1705
序列号: 18403/00011111
固件信息:
制造商: INSYDE Corp.
名字: XMGKB500P0505
描述: XMGKB500P0505
版本: XMCC - 0
baseboard:
制造商: Timi
型号:
版本: XMGKB500P0505
序列号: MMG5S0000018085AP00KK
16:56:30.004 [main] INFO c.r.w.c.t.SystemInfoTest - [main,47] - 处理器信息...
Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz
1 (物理CPU封装)physical CPU package(s)
4 (物理CPU核心)physical CPU core(s)
4 (物理CPU核心)logical CPU(s)
(识别)Identifier: Intel64 Family 6 Model 158 Stepping 9
(处理器ID)ProcessorID: BFEBFBFF000906E9
16:56:30.443 [main] INFO c.r.w.c.t.SystemInfoTest - [main,50] - 获取内存信息...
(内存)Memory: 8.5 GiB/15.9 GiB
(交换使用)Swap used: 1008 KiB/1 GiB
16:56:30.453 [main] INFO c.r.w.c.t.SystemInfoTest - [main,53] - 获取cup信息...
(正常运行时间)Uptime: 3 days, 15:55:26
(上下文切换/中断)Context Switches/Interrupts: 777442025 / 502072402
(等待)CPU, IOWait, and IRQ ticks @ 0 sec:[77333781, 0, 14145947, 115158468, 0, 457058, 863480, 0]
CPU, IOWait, and IRQ ticks @ 1 sec:[77334000, 0, 14146423, 115161765, 0, 457058, 863488, 0]
User: 5.5% Nice: 0.0% System: 11.9% Idle: 82.4% IOwait: 0.0% IRQ: 0.0% SoftIRQ: 0.2% Steal: 0.0%
(cup使用率)CPU load: 44.6% (counting ticks)
CPU load: 20.9% (OS MXBean)
(平均CPU负载)CPU load averages: N/A N/A N/A
每个处理器的CPU负载: 37.1% 55.6% 43.2% 42.5%
16:56:31.467 [main] INFO c.r.w.c.t.SystemInfoTest - [main,56] - 获取进程...
(进程)Processes: 221, (线程)Threads: 2594
PID %CPU %MEM VSZ RSS Name
9016 97.7 0.8 2.2 GiB 134.2 MiB java
4452 80.3 0.6 1.6 GiB 105.2 MiB java
0 36.4 0.0 8 KiB 8 KiB Idle
4092 27.5 11.1 1016.6 MiB 1.8 GiB idea64
10680 12.4 0.6 1.6 GiB 102.2 MiB Typora
16:56:31.966 [main] INFO c.r.w.c.t.SystemInfoTest - [main,59] - 传感器...
(传感器)Sensors:
(CPU温度)CPU Temperature: 57.0°C
(风扇转速)Fan Speeds: [0]
(CPU电压)CPU Voltage: 0.0V
16:56:31.990 [main] INFO c.r.w.c.t.SystemInfoTest - [main,62] - 电源...
(电源)Power: (充电)Charging
System Battery @ 100.0%
16:56:31.994 [main] INFO c.r.w.c.t.SystemInfoTest - [main,65] - 检查磁盘...
(硬盘)Disks:
\\.\PHYSICALDRIVE1: (model: ST1000LM048-2E7172 (标准磁盘驱动器) - S/N: WL156PFG) size: 1.0 TB, reads: 92758 (11.4 GiB), writes: 88745 (8.2 GiB), xfer: 1591470084982 ms
|-- 磁盘 #1,分区 #0: GPT: Basic Data (GPT: 基本数据) Maj:Min=1:0, size: 265.4 GB @ D:\
|-- 磁盘 #1,分区 #1: GPT: System (GPT: 系统) Maj:Min=1:1, size: 314.6 MB @ F:\
|-- 磁盘 #1,分区 #2: GPT: Unknown (GPT: 未知) Maj:Min=1:2, size: 51.5 GB
|-- 磁盘 #1,分区 #3: GPT: Unknown (GPT: 未知) Maj:Min=1:3, size: 650.0 MB
|-- 磁盘 #1,分区 #4: GPT: Basic Data (GPT: 基本数据) Maj:Min=1:4, size: 157.3 GB @ E:\
|-- 磁盘 #1,分区 #5: GPT: Basic Data (GPT: 基本数据) Maj:Min=1:5, size: 262.9 GB @ G:\
|-- 磁盘 #1,分区 #6: GPT: Basic Data (GPT: 基本数据) Maj:Min=1:6, size: 262.1 GB @ H:\
\\.\PHYSICALDRIVE0: (model: SAMSUNG MZNLN128HAHQ-00000 (标准磁盘驱动器) - S/N: S3TUNF0K118438) size: 128.0 GB, reads: 547959 (12.8 GiB), writes: 320142 (8.2 GiB), xfer: 1591468456164 ms
|-- 磁盘 #0,分区 #0: GPT: System (GPT: 系统) Maj:Min=0:0, size: 272.6 MB
|-- 磁盘 #0,分区 #1: GPT: Basic Data (GPT: 基本数据) Maj:Min=0:1, size: 126.6 GB @ C:\
|-- 磁盘 #0,分区 #2: GPT: Unknown (GPT: 未知) Maj:Min=0:2, size: 1.1 GB
16:56:32.115 [main] INFO c.r.w.c.t.SystemInfoTest - [main,68] - 检查文件系统...
(文件系统)File System:
(文件描述)File Descriptors: 90130/16711680
本地固定磁盘 (C:) (Fixed drive) [NTFS] 29.7 GiB of 117.9 GiB free (25.2%) is \\?\Volume{af7be6b6-3a6b-48b2-ae40-e906d608d1a0}\ and is mounted at C:\
本地固定磁盘 (D:) (Fixed drive) [NTFS] 114.8 GiB of 247.2 GiB free (46.5%) is \\?\Volume{b3e1fbd7-a1bb-4b8f-852d-f5790c453ac0}\ and is mounted at D:\
本地固定磁盘 (E:) (Fixed drive) [NTFS] 122.6 GiB of 146.5 GiB free (83.7%) is \\?\Volume{a91a6ffa-9391-4f19-aa19-ca28b787c731}\ and is mounted at E:\
本地固定磁盘 (G:) (Fixed drive) [NTFS] 181.5 GiB of 244.9 GiB free (74.1%) is \\?\Volume{00344f6b-1124-443e-901b-8e3ef6ba00e0}\ and is mounted at G:\
本地固定磁盘 (H:) (Fixed drive) [NTFS] 208.5 GiB of 244.1 GiB free (85.4%) is \\?\Volume{3428bafe-c664-495f-a43c-608e4d405a9a}\ and is mounted at H:\
本地固定磁盘 (F:) (Fixed drive) [FAT] 266.5 MiB of 299.8 MiB free (88.9%) is \\?\Volume{f4df6088-4dc1-4d34-ac89-4df2d8cf6d5f}\ and is mounted at F:\
16:56:32.162 [main] INFO c.r.w.c.t.SystemInfoTest - [main,71] - 检查网络接口...
(网络接口)Network interfaces:
Name: wlan0 (Intel(R) Dual Band Wireless-AC 8265)
MAC Address: 0c:54:15:9c:d3:a3
MTU: 1500, Speed: 130 Mbps
IPv4: [192.168.31.54]
IPv6: [fe80:0:0:0:5103:35b6:8794:ac8e]
Traffic: received 973488 packets/592.4 MiB (0 err); transmitted 887106 packets/85.6 MiB (0 err)
Name: eth1 (Realtek Gaming GBE Family Controller)
MAC Address: d8:c4:97:6b:11:32
MTU: 1500, Speed: 0 bps
IPv4: []
IPv6: [fe80:0:0:0:f51c:1f7:754e:be22]
Traffic: received ?/?; transmitted ?/?
Name: wlan1 (Microsoft Wi-Fi Direct Virtual Adapter)
MAC Address: 0e:54:15:9c:d3:a3
MTU: 1500, Speed: 0 bps
IPv4: []
IPv6: [fe80:0:0:0:5dec:d134:fbce:9d88]
Traffic: received ?/?; transmitted ?/?
Name: wlan3 (Microsoft Wi-Fi Direct Virtual Adapter #3)
MAC Address: 0c:54:15:9c:d3:a4
MTU: 1500, Speed: 0 bps
IPv4: []
IPv6: [fe80:0:0:0:5875:6784:f555:74f5]
Traffic: received ?/?; transmitted ?/?
16:56:32.569 [main] INFO c.r.w.c.t.SystemInfoTest - [main,74] - 检查网络参数...
Network parameters:
(主机名)Host name: DESKTOP-T2AUMSF
(域名)Domain name: DESKTOP-T2AUMSF
(DNS服务器)DNS servers: [192.168.31.1]
(IPv4网关)IPv4 Gateway: 192.168.31.1
(IPv6网关)IPv6 Gateway:
16:56:32.623 [main] INFO c.r.w.c.t.SystemInfoTest - [main,78] - 检查显示...
(显示器)Displays:
Display 0:
Manuf. ID=BOE, Product ID=747, Digital, Serial=00000000, ManufDate=5/2017, EDID v1.4
34 x 19 cm (13.4 x 7.5 in)
Preferred Timing: Clock 152MHz, Active Pixels 1920x1080
Preferred Timing: Clock 117MHz, Active Pixels 1920x1080
Unspecified Text: BOE CQ
Unspecified Text: NV156FHM-N61
Display 1:
Manuf. ID=TBE, Product ID=2705, Digital, Serial=00000000, ManufDate=4/2020, EDID v1.3
60 x 34 cm (23.6 x 13.4 in)
Preferred Timing: Clock 297MHz, Active Pixels 3840x2160
Preferred Timing: Clock 148MHz, Active Pixels 1920x1080
Monitor Name: HX270SR5
Range Limits: Field Rate 50-75 Hz vertical, 31--116 Hz horizontal, Max clock: 600 MHz
16:56:32.635 [main] INFO c.r.w.c.t.SystemInfoTest - [main,82] - 检查USB设备...
(usb设备)USB Devices:
Intel(R) USB 3.0 可扩展主机控制器 - 1.0 (Microsoft) (通用 USB xHCI 主机控制器)
|-- USB 根集线器(USB 3.0) ((标准 USB 集线器))
|-- Realtek USB 2.0 Card Reader (Realtek Semiconductor Corp.)
|-- USB Composite Device ((标准 USB 主控制器))
|-- USB 输入设备 ((标准系统设备))
|-- HID-compliant mouse (Microsoft)
|-- USB 输入设备 ((标准系统设备))
|-- HID Keyboard Device ((标准键盘))
|-- 符合 HID 标准的供应商定义设备 ((标准系统设备))
|-- 符合 HID 标准的供应商定义设备 ((标准系统设备))
|-- 符合 HID 标准的用户控制设备 (Microsoft)
|-- 符合 HID 标准的系统控制器 ((标准系统设备))
|-- USB Composite Device ((标准 USB 主控制器))
|-- XiaoMi USB 2.0 Webcam (Microsoft)
|-- USB Composite Device ((标准 USB 主控制器))
|-- USB 输入设备 ((标准系统设备))
|-- HID Keyboard Device ((标准键盘))
|-- USB 输入设备 ((标准系统设备))
|-- 符合 HID 标准的用户控制设备 (Microsoft)
|-- 符合 HID 标准的系统控制器 ((标准系统设备))
|-- USB 输入设备 ((标准系统设备))
|-- HID Keyboard Device ((标准键盘))
|-- 符合 HID 标准的供应商定义设备 ((标准系统设备))
|-- 符合 HID 标准的用户控制设备 (Microsoft)
|-- 英特尔(R) 无线 Bluetooth(R) (Intel Corporation)