แž€แŸ’แžšแžปแž˜แž แŸŠแžปแž“ Microsoft แž”แžถแž“แž…แŸแž‰แž•แŸ’แžŸแžถแž™แž”แžŽแŸ’แžŽแžถแž›แŸแž™ Rust แž•แŸ’แž›แžผแžœแž€แžถแžšแžŸแž˜แŸ’แžšแžถแž”แŸ‹ Windows API

แž”แžŽแŸ’แžŽแžถแž›แŸแž™โ€‹แžแŸ’แžšแžผแžœโ€‹แž”แžถแž“โ€‹แžšแž…แž“แžถโ€‹แž‡แžถโ€‹แž”แŸ’แžšแžขแž”แŸ‹โ€‹แž…แŸ’แžšแŸ‚แŸ‡โ€‹แž€แŸ’แžšแŸ„แž˜โ€‹แžขแžถแž‡แŸ’แž‰แžถแž”แŸแžŽแŸ’แžŽ MIT แžŠแŸ‚แž›โ€‹แžขแžถแž…โ€‹แž”แŸ’แžšแžพโ€‹แž”แžถแž“โ€‹แžŠแžผแž…โ€‹แž“แŸแŸ‡แŸ–

[dependencies] windows = "0.2.1"

[build-dependencies] windows = "0.2.1"

แž”แž“แŸ’แž‘แžถแž”แŸ‹แž–แžธแž“แŸแŸ‡ แž“แŸ…แž€แŸ’แž“แžปแž„ build.rs build script แžขแŸ’แž“แž€แžขแžถแž…แž”แž„แŸ’แž€แžพแž modules แžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž€แžถแžšแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แž˜แŸ’แž˜แžœแžทแž’แžธแžšแž”แžŸแŸ‹แžขแŸ’แž“แž€แŸ–

fn แž˜แŸ () {
windows :: build!(
windows::data::xml::dom::*
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject}
windows::win32::windows_programming::CloseHandle
);
}

แžฏแž€แžŸแžถแžšแžขแŸ†แž–แžธแž˜แŸ‰แžผแžŒแžปแž›แžŠแŸ‚แž›แž˜แžถแž“แžแŸ’แžšแžผแžœแž”แžถแž“แž”แŸ„แŸ‡แž–แžปแž˜แŸ’แž–แž•แŸ’แžŸแžถแž™แž“แŸ…แž›แžพ docs.rs.

แž€แžผแžŠแž‚แŸ†แžšแžผแŸ–

แž€แžถแžšแž…แž„ mod {
::windows::include_bindings!();
}

แž”แŸ’แžšแžพแž€แžถแžšแž…แž„แŸ–:{
windows::data::xml::dom::*,
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject},
windows::win32::windows_programming::CloseHandle,
};

fn main() -> windows::Result<()> {
แžขแž“แžปแž‰แŸ’แž‰แžถแžแžฑแŸ’แž™ doc = XmlDocument::new();
doc.load_xml(" แžŸแžฝแžŸแŸ’แžแžธโ€‹แž–แžทแž—แž–แž›แŸ„แž€ ")?;

แžขแž“แžปแž‰แŸ’แž‰แžถแžแžฑแŸ’แž™ root = doc.document_element();
แžขแŸ‡แžขแžถแž„!(root.node_name()? == "html");
แžขแŸ‡แžขแžถแž„!(root.inner_text()? == "แžŸแžฝแžŸแŸ’แžแžธแž–แžทแž—แž–แž›แŸ„แž€");

แž˜แžทแž“โ€‹แž˜แžถแž“โ€‹แžŸแžปแžœแžแŸ’แžแžทแž—แžถแž– {
let event = CreateEventW(
std::ptr::null_mut(),
true.into(),
false.into(),
std::ptr::null(),
);

SetEvent(แž–แŸ’แžšแžนแžแŸ’แžแžทแž€แžถแžšแžŽแŸ)แŸ”ok()?;
WaitForSingleObject(แž–แŸ’แžšแžนแžแŸ’แžแžทแž€แžถแžšแžŽแŸ, 0);
CloseHandle(event).ok()?;
}

แž™แž›แŸ‹แž–แŸ’แžšแž˜(())
}

แž€แžถแžšแž แŸ…แž˜แžปแžแž„แžถแžšแž˜แžฝแž™แž…แŸ†แž“แžฝแž“แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แž˜แžทแž“แž˜แžถแž“แžŸแžปแžœแžแŸ’แžแžทแž—แžถแž– แž–แžธแž–แŸ’แžšแŸ„แŸ‡แž˜แžปแžแž„แžถแžšแž‘แžถแŸ†แž„แž“แŸแŸ‡แžแŸ’แžšแžผแžœแž”แžถแž“แž•แŸ’แžแž›แŸ‹แž‡แžผแž“แžŠแžผแž…แž˜แžถแž“ แžŠแŸ„แž™แž˜แžทแž“แž˜แžถแž“แž€แžถแžšแžŸแž˜แŸ’แžšแž”แžแŸ’แž›แžฝแž“แž‘แŸ…แž“แžนแž„แžขแž“แžปแžŸแž‰แŸ’แž‰แžถ RustแŸ” Crate แžแŸ’แžšแžผแžœแž”แžถแž“แžšแž…แž“แžถแžกแžพแž„แž“แŸ…แž›แžพแž‚แŸ„แž›แž€แžถแžšแžŽแŸแžŠแžผแž…แž‚แŸ’แž“แžถแŸ” libcแžŠแŸ‚แž›แž”แž˜แŸ’แžšแžพแž‡แžถแž”แŸ’แžšแžขแž”แŸ‹แž˜แžผแž›แžŠแŸ’แž‹แžถแž“แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž…แžผแž›แž”แŸ’แžšแžพ libc แž“แžทแž„แžแŸ’แžšแžผแžœแž”แžถแž“แž”แŸ’แžšแžพแž‡แžถแž˜แžผแž›แžŠแŸ’แž‹แžถแž“แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž”แž„แŸ’แž€แžพแžแž”แžŽแŸ’แžŽแžถแž›แŸแž™แž‡แžถแž˜แžฝแž™แž“แžนแž„แž…แŸ†แžŽแžปแž…แž”แŸ’แžšแž‘แžถแž€แŸ‹แžŸแžปแžœแžแŸ’แžแžทแž—แžถแž–แŸ”


แž‚แž˜แŸ’แžšแŸ„แž„แž“แŸแŸ‡แžแŸ’แžšแžผแžœแž”แžถแž“แž”แž„แŸ’แž€แžพแžแžกแžพแž„แž€แŸ’แž“แžปแž„แž€แŸ’แžšแž”แžแŸแžŽแŸ’แžŒ แž‚แž˜แŸ’แžšแŸ„แž„แž‘แžทแž“แŸ’แž“แž“แŸแž™แž˜แŸแžแžถ Win32แžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž”แžถแž“แžšแž…แž“แžถแžกแžพแž„แžŠแžพแž˜แŸ’แž”แžธแž’แŸ’แžœแžพแžฑแŸ’แž™แžœแžถแž€แžถแž“แŸ‹แžแŸ‚แž„แžถแž™แžŸแŸ’แžšแžฝแž›แž€แŸ’แž“แžปแž„แž€แžถแžšแž”แž„แŸ’แž€แžพแž APIs แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž—แžถแžŸแžถแžŸแžšแžŸแŸแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธแž•แŸ’แžŸแŸแž„แŸ—แŸ” แž”แžŽแŸ’แžŽแžถแž›แŸแž™แž‘แžธแž–แžธแžšแžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž”แžถแž“แž”แž„แŸ’แž€แžพแžแžกแžพแž„แžŠแŸ„แž™แž•แŸ’แžขแŸ‚แž€แž›แžพแž‚แž˜แŸ’แžšแŸ„แž„แž‘แžทแž“แŸ’แž“แž“แŸแž™แž˜แŸแžแžถแž€แŸ’แž“แžปแž„แžŠแŸ†แžŽแžถแž€แŸ‹แž€แžถแž›แžŠแŸ†แž”แžผแž„แž“แŸƒแž‚แž˜แŸ’แžšแŸ„แž„ - C#/Win32. แž€แŸ’แžšแžปแž˜แž แŸŠแžปแž“ Microsoft แž€แŸแž”แžถแž“แž”แŸ’แžšแž€แžถแžŸแž–แžธแž€แžถแžšแž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แž€แžถแžšแž„แžถแžšแž“แŸ…แž›แžพ แž€แŸ†แžŽแŸ‚แžŸแž˜แŸ’แžšแžถแž”แŸ‹ C ++แžŠแŸ‚แž›แž”แŸ’แžšแžพแžšแž…แž“แžถแž”แŸแž‘แŸ’แž˜แž‘แŸ†แž“แžพแž”แž“แŸƒแž—แžถแžŸแžถแŸ”

แž”แŸ’แžšแž—แž–: linux.org.ru