/winapi-rs

Rust types and constants for WinAPI bindings

Primary LanguageRustMIT LicenseMIT

winapi-rs Build status Build Status Gitter Crates.io

Documentation

Official IRC channel: #winapi on Mozilla IRC

This crate provides raw FFI bindings to all of Windows API. They are gathered by hand using the Windows 10 SDK from Microsoft. I aim to replace all existing Windows FFI in other crates with this set of crates through the "Embrace, extend, and extinguish" technique.

If this crate is missing something you need, feel free to create an issue, open a pull request, or contact me via other means.

This crate depends on Rust 1.6 on Windows. On other platforms this crate is a no-op and should compile with Rust 1.0.

This branch is currently undergoing a rewrite and as such is not suitable for production use.

Example

Cargo.toml:

[dependencies]
winapi = "0.2"
user32-sys = "0.2"

main.rs:

extern crate winapi;
extern crate user32;
use std::ffi::OsStr;
use std::io::Error;
use std::iter::once;
use std::os::windows::ffi::OsStrExt;
use std::ptr::null_mut;

fn main() {
    let msg = "Hello, world!";
    let wide: Vec<u16> = OsStr::new(msg).encode_wide().chain(once(0)).collect();
    let ret = unsafe {
        user32::MessageBoxW(null_mut(), wide.as_ptr(), wide.as_ptr(), winapi::MB_OK)
    };
    if ret == 0 {
        println!("Failed: {:?}", Error::last_os_error());
    }
}