9 个重大版本发布
0.58.0 | 2024年7月3日 |
---|---|
0.56.0 | 2024年4月12日 |
0.55.0 | 2024年3月6日 |
0.52.0 | 2023年11月15日 |
0.0.0 | 2021年11月15日 |
#241 in Windows API
3,770,740 个月下载量
用于 9,969 个crate(26 个直接使用)
240KB
6K SLoC
Rust for Windows
使用 windows 和 windows-sys crate,您可以调用过去、现在和将来的任何Windows API,这些API是通过直接从描述API的元数据动态生成的代码来调用的,并直接调用您的Rust包。Rust语言投影遵循由C++/WinRT建立的建立语言投影的传统,使用标准语言和编译器为Windows构建语言投影,为Rust开发者调用Windows API提供了一种自然和直观的方式。
首先,将以下内容添加到您的Cargo.toml文件中
[dependencies.windows]
version = "0.58"
features = [
"Data_Xml_Dom",
"Win32_Foundation",
"Win32_Security",
"Win32_System_Threading",
"Win32_UI_WindowsAndMessaging",
]
根据需要使用任何Windows API
use windows::{
core::*, Data::Xml::Dom::*, Win32::Foundation::*, Win32::System::Threading::*,
Win32::UI::WindowsAndMessaging::*,
};
fn main() -> Result<()> {
let doc = XmlDocument::new()?;
doc.LoadXml(h!("<html>hello world</html>"))?;
let root = doc.DocumentElement()?;
assert!(root.NodeName()? == "html");
assert!(root.InnerText()? == "hello world");
unsafe {
let event = CreateEventW(None, true, false, None)?;
SetEvent(event)?;
WaitForSingleObject(event, 0);
CloseHandle(event)?;
MessageBoxA(None, s!("Ansi"), s!("Caption"), MB_OK);
MessageBoxW(None, w!("Wide"), w!("Caption"), MB_OK);
}
Ok(())
}
windows-sys
windows-sys
crate 是对最高要求情况的无开销后备方案,主要用于绝对最佳编译时间至关重要的情况。它只包含函数声明(externs)、结构和常量。不提供便利助手、特性和包装器。
首先,将以下内容添加到您的Cargo.toml文件中
[dependencies.windows-sys]
version = "0.52"
features = [
"Win32_Foundation",
"Win32_Security",
"Win32_System_Threading",
"Win32_UI_WindowsAndMessaging",
]
根据需要使用任何Windows API
use windows_sys::{
core::*, Win32::Foundation::*, Win32::System::Threading::*, Win32::UI::WindowsAndMessaging::*,
};
fn main() {
unsafe {
let event = CreateEventW(std::ptr::null(), 1, 0, std::ptr::null());
SetEvent(event);
WaitForSingleObject(event, 0);
CloseHandle(event);
MessageBoxA(0 as _, s!("Ansi"), s!("Caption"), MB_OK);
MessageBoxW(0 as _, w!("Wide"), w!("Caption"), MB_OK);
}
}
依赖关系
~0.3–6MB
~17K SLoC