Crates.io | wmi |
lib.rs | wmi |
version | |
source | src |
created_at | 2019-04-14 12:11:47.202359 |
updated_at | 2024-12-04 10:48:19.528189 |
description | WMI crate for rust. |
homepage | https://github.com/ohadravid/wmi-rs |
repository | https://github.com/ohadravid/wmi-rs |
max_upload_size | |
id | 127889 |
Cargo.toml error: | TOML parse error at line 18, column 1 | 18 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include` |
size | 0 |
WMI (Windows Management Instrumentation) crate for rust.
# Cargo.toml
[dependencies]
wmi = "0.14"
Queries can be deserialized into a free-form HashMap
or a struct
:
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
use serde::Deserialize;
use wmi::{COMLibrary, Variant, WMIConnection, WMIDateTime};
use std::collections::HashMap;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let com_con = COMLibrary::new()?;
let wmi_con = WMIConnection::new(com_con.into())?;
let results: Vec<HashMap<String, Variant>> = wmi_con.raw_query("SELECT * FROM Win32_OperatingSystem")?;
for os in results {
println!("{:#?}", os);
}
#[derive(Deserialize, Debug)]
struct Win32_OperatingSystem {
Caption: String,
Name: String,
CurrentTimeZone: i16,
Debug: bool,
EncryptionLevel: u32,
ForegroundApplicationBoost: u8,
LastBootUpTime: WMIDateTime,
}
let results: Vec<Win32_OperatingSystem> = wmi_con.query()?;
for os in results {
println!("{:#?}", os);
}
Ok(())
}
chrono
vs time
If you prefer to use the time
crate instead of the default chrono
, include wmi
as
[dependencies]
wmi-rs = { version = "*", default-features = false, features = ["time"] }
and use the WMIOffsetDateTime
wrapper instead of the WMIDateTime
wrapper.
WMI supports async queries, with methods like ExecAsyncQuery.
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
use serde::Deserialize;
use wmi::{COMLibrary, Variant, WMIConnection, WMIDateTime};
use std::collections::HashMap;
use futures::executor::block_on;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let com_con = COMLibrary::new()?;
let wmi_con = WMIConnection::new(com_con.into())?;
block_on(exec_async_query(&wmi_con))?;
Ok(())
}
async fn exec_async_query(wmi_con: &WMIConnection) -> Result<(), Box<dyn std::error::Error>> {
let results: Vec<HashMap<String, Variant>> =
wmi_con.async_raw_query("SELECT * FROM Win32_OperatingSystem").await?;
for os in results {
println!("{:#?}", os);
}
#[derive(Deserialize, Debug)]
struct Win32_OperatingSystem {
Caption: String,
Name: String,
CurrentTimeZone: i16,
Debug: bool,
EncryptionLevel: u32,
ForegroundApplicationBoost: u8,
LastBootUpTime: WMIDateTime,
}
let results: Vec<Win32_OperatingSystem> = wmi_con.async_query().await?;
for os in results {
println!("{:#?}", os);
}
Ok(())
}
The wmi
crate is licensed under either of
Apache License, Version 2.0, (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.