RustでWindows APIを使用する方法


  1. winapiクレートを使用する方法: Rustのwinapiクレートは、Windows APIの関数や定数を提供しています。まず、Cargo.tomlファイルにwinapiクレートを追加します。
[dependencies]
winapi = "0.3.9"

次に、以下のようにコードを記述してWindows APIを使用します。

extern crate winapi;
use winapi::um::winuser::{MessageBoxW, MB_OK};
use winapi::shared::ntdef::LPCWSTR;
use std::ptr;
fn main() {
    let message = "Hello from Rust!";
    let title = "Windows API Example";
    let message_ptr = message.encode_utf16().chain(Some(0)).collect::<Vec<_>>();
    let title_ptr = title.encode_utf16().chain(Some(0)).collect::<Vec<_>>();
    unsafe {
        MessageBoxW(
            ptr::null_mut(), 
            message_ptr.as_ptr() as LPCWSTR, 
            title_ptr.as_ptr() as LPCWSTR, 
            MB_OK
        );
    }
}

この例では、Win32のMessageBoxW関数を使用してメッセージボックスを表示しています。

  1. widestringクレートを使用する方法: widestringクレートは、UTF-16エンコーディングをサポートする文字列型を提供します。これを使用することで、Unicode文字列をWindows APIに渡すことができます。まず、Cargo.tomlファイルにwidestringクレートを追加します。
[dependencies]
widestring = "0.4.0"

次に、以下のようにコードを記述してWindows APIを使用します。

extern crate winapi;
extern crate widestring;
use winapi::um::winuser::{MessageBoxW, MB_OK};
use widestring::U16CString;
fn main() {
    let message = U16CString::from_str("Hello from Rust!").unwrap();
    let title = U16CString::from_str("Windows API Example").unwrap();
    unsafe {
        MessageBoxW(
            std::ptr::null_mut(), 
            message.as_ptr(), 
            title.as_ptr(), 
            MB_OK
        );
    }
}

この例では、U16CString型を使用してUTF-16エンコーディングの文字列を作成し、それをMessageBoxW関数に渡しています。

以上のように、RustでWindows APIを使用する方法を紹介しました。これらのコード例を試してみて、Windowsプラットフォーム上でのアプリケーション開発に役立ててください。