1个不稳定版本

0.51.1 2023年9月20日

#143Windows API

Download history 31/week @ 2024-03-11 31/week @ 2024-03-18 64/week @ 2024-03-25 89/week @ 2024-04-01 26/week @ 2024-04-08 27/week @ 2024-04-15 34/week @ 2024-04-22 26/week @ 2024-04-29 43/week @ 2024-05-06 33/week @ 2024-05-13 36/week @ 2024-05-20 31/week @ 2024-05-27 32/week @ 2024-06-03 33/week @ 2024-06-10 29/week @ 2024-06-17 37/week @ 2024-06-24

131 每月下载量
用于 12 个crate(通过 makepad-platform

MIT/Apache

2.5MB
46K SLoC

Rust for Windows

使用 windowswindows-sys crate,您可以调用过去、现在和未来的任何Windows API,这些API直接从描述API的元数据生成,直接进入您的Rust包中,您可以像调用另一个Rust模块一样调用它们。Rust语言投影遵循C++/WinRT的传统,使用标准语言和编译器为Windows构建语言投影,为Rust开发者调用Windows API提供了一种自然和惯用的方式。

首先将以下内容添加到您的Cargo.toml文件中

[dependencies.windows]
version = "0.51"
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.48"
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, s!("Ansi"), s!("Caption"), MB_OK);
        MessageBoxW(0, w!("Wide"), w!("Caption"), MB_OK);
    }
}

依赖关系

~0–7MB