鴨川のはりねずみ

[Rust] Win10のカラーテーマを取得

目次

WinRT でアプリのカラーテーマ1を取得するには Windows::UI::ViewManagement::UISettings クラスの GetColorValue メソッドを叩きます.

環境

本記事の内容は Win10 v20H2, Rust 1.51.0, windows-rs 0.7.0 で確認しました.

import マクロ

build.rs で必要な WinRT API を指定し import します.

fn main() {
    windows::build!(
        Windows::UI::Color,
        Windows::UI::ViewManagement::{
            UISettings, UIColorType
        },
    )
}

色の取得

UISettings クラスの GetColorValue メソッドに欲しい色のタイプ (UIColorType) を渡します. 戻り値は Color です.

アクセントカラー

use bindings::Windows::UI::ViewManagement::{
    UISettings, UIColorType,
};

fn main() -> windows::Result<()> {
    let ui_settings = UISettings::new()?;
    let color = ui_settings.GetColorValue(UIColorType::Accent)?;

    println!("{:?}", &color);

    Ok(())
}

ダークモード

ダークモードに設定されているときに true, ライトモードのときには false を返す関数です.

use bindings::Windows::UI::{Color, ViewManagement::{
    UISettings, UIColorType,
}};

const DARK: Color = Color { A: 255, R: 0, G: 0, B: 0 };

fn is_dark_mode() -> windows::Result<bool> {
    let ui_settings = UISettings::new()?;
    let color = ui_settings.GetColorValue(UIColorType::Background)?;
    
    Ok(color == DARK)
}

参考文献

1

本記事のコードは「設定」でいう「Windows モード」ではなく「アプリ モード」を取得するものです.