要获取 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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录