Tauri 获取 Windows 系统详细信息:CPU、内存、电量、网络状态、系统负载和应用程序占用内存
要获取 Windows 系统的详细信息,您可以使用 Tauri 与一些其他库来实现。以下是一个示例代码,展示了如何获取 CPU、内存、电量、网络状态、系统负载和应用程序占用内存的信息:
use tauri::WindowBuilder;
use sysinfo::{ProcessorExt, SystemExt, DiskExt, NetworkExt};
use std::time::Duration;
fn main() {
let mut system = sysinfo::System::new_all();
system.refresh_all();
// 获取所有处理器的信息
for (i, processor) in system.processors().iter().enumerate() {
println!('CPU{}: {}', i, processor.name());
}
// 获取内存信息
let total_memory = system.total_memory();
let used_memory = system.used_memory();
println!('Total Memory: {} KB', total_memory);
println!('Used Memory: {} KB', used_memory);
// 获取电量信息
if let Ok(battery) = battery::Manager::new().unwrap().battery() {
if let battery::State::Discharging = battery.state() {
println!('Battery Level: {}%', battery.state_of_charge().unwrap());
}
}
// 获取网络状态
let interfaces = sysinfo::NetworkExt::get_networks();
for interface in interfaces {
println!('Interface: {}', interface.get_name());
println!(' IP Address: {:?}', interface.get_ips());
println!(' MAC Address: {:?}', interface.get_mac());
println!(' Received: {} B', interface.get_received());
println!(' Sent: {} B', interface.get_transmitted());
}
// 获取系统负载
let load_avg = sysinfo::SystemExt::get_load_average();
println!('Load Average: {:?}', load_avg);
// 获取应用程序占用内存
let pid = std::process::id();
if let Some(process) = system.process(pid) {
println!('Process Memory Usage: {} KB', process.memory());
}
// 创建 Tauri 窗口
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![get_system_info])
.run(tauri::generate_context!())
.expect('error while running tauri application');
}
#[tauri::command]
fn get_system_info() -> String {
// 返回系统信息的 JSON 字符串
let mut system = sysinfo::System::new_all();
system.refresh_all();
let mut system_info = serde_json::Map::new();
// 获取所有处理器的信息
let processors: Vec<serde_json::Value> = system
.processors()
.iter()
.enumerate()
.map(|(i, processor)| {
let mut processor_info = serde_json::Map::new();
processor_info.insert('name'.to_string(), serde_json::Value::String(processor.name().to_string()));
(i, serde_json::Value::Object(processor_info))
})
.collect();
system_info.insert('cpus'.to_string(), serde_json::Value::Object(processors.into_iter().collect()));
// 获取内存信息
system_info.insert('total_memory'.to_string(), serde_json::Value::Number(serde_json::Number::from(system.total_memory())));
system_info.insert('used_memory'.to_string(), serde_json::Value::Number(serde_json::Number::from(system.used_memory())));
// 获取电量信息
if let Ok(battery) = battery::Manager::new().unwrap().battery() {
if let battery::State::Discharging = battery.state() {
system_info.insert('battery_level'.to_string(), serde_json::Value::Number(serde_json::Number::from(battery.state_of_charge().unwrap())));
}
}
// 获取网络状态
let interfaces = sysinfo::NetworkExt::get_networks();
let network_info: Vec<serde_json::Value> = interfaces.into_iter().map(|interface| {
let mut interface_info = serde_json::Map::new();
interface_info.insert('name'.to_string(), serde_json::Value::String(interface.get_name().to_string()));
interface_info.insert('ip_address'.to_string(), serde_json::Value::Array(interface.get_ips().iter().map(|ip| serde_json::Value::String(ip.to_string())).collect()));
interface_info.insert('mac_address'.to_string(), serde_json::Value::Array(interface.get_mac().iter().map(|byte| serde_json::Value::Number(serde_json::Number::from(*byte))).collect()));
interface_info.insert('received'.to_string(), serde_json::Value::Number(serde_json::Number::from(interface.get_received())));
interface_info.insert('sent'.to_string(), serde_json::Value::Number(serde_json::Number::from(interface.get_transmitted())));
serde_json::Value::Object(interface_info)
}).collect();
system_info.insert('networks'.to_string(), serde_json::Value::Array(network_info));
// 获取系统负载
system_info.insert('load_average'.to_string(), serde_json::Value::Array(sysinfo::SystemExt::get_load_average().into_iter().map(|load| serde_json::Value::Number(serde_json::Number::from(load))).collect()));
// 获取应用程序占用内存
let pid = std::process::id();
if let Some(process) = system.process(pid) {
system_info.insert('process_memory_usage'.to_string(), serde_json::Value::Number(serde_json::Number::from(process.memory())));
}
serde_json::Value::Object(system_info).to_string()
}
这是一个简单的示例,您可以根据实际需求进行适当的修改和扩展。请确保在 Cargo.toml 文件中添加必要的依赖项:
[dependencies]
tauri = '0.14.1'
sysinfo = '0.19.4'
battery = '0.10.0'
ser
原文地址: https://www.cveoy.top/t/topic/o5kH 著作权归作者所有。请勿转载和采集!