接続されているすべてのモニター情報(マルチモニター構成)を取得する方法を解説します。
前提条件
@tauri-apps/api パッケージが必要です。
Permissions (権限) の設定
src-tauri/capabilities/default.json に以下の権限を追加します。
{
"permissions": [
...,
"core:window:default"
]
}
1. フロントエンドから作成する (TypeScript)
@tauri-apps/api/window の availableMonitors() 関数を使用します。
これは Monitor オブジェクトの配列を返します。
import { availableMonitors } from '@tauri-apps/api/window';
async function listMonitors() {
try {
const monitors = await availableMonitors();
console.log(`モニター数: ${monitors.length}`);
monitors.forEach((monitor, index) => {
console.log(`--- Monitor #${index + 1} ---`);
console.log(`Name: ${monitor.name}`);
console.log(`Position: (${monitor.position.x}, ${monitor.position.y})`);
console.log(`Size: ${monitor.size.width}x${monitor.size.height}`);
console.log(`ScaleFactor: ${monitor.scaleFactor}`);
});
} catch (error) {
console.error('モニター情報の取得に失敗:', error);
}
}
listMonitors();
2. バックエンドから作成する (Rust)
Rust 側の tauri::Window インスタンスから、利用可能なすべてのモニター情報を取得できます。
Rust 実装
use tauri::{command, Window};
#[command]
fn get_monitors_from_rust(window: Window) -> Vec<String> {
match window.available_monitors() {
Ok(monitors) => monitors.iter().enumerate().map(|(i, m)| {
format!(
"Monitor #{}: {}x{} (Scale: {})",
i, m.size().width, m.size().height, m.scale_factor()
)
}).collect(),
Err(_) => vec![],
}
}
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![get_monitors_from_rust])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
フロントエンドからの呼び出し
import { invoke } from '@tauri-apps/api/core';
invoke<string[]>('get_monitors_from_rust')
.then(monitors => console.log('Monitors from Rust:', monitors))
.catch(console.error);
※ availableMonitors は Window インスタンスメソッドではなく、トップレベルのエクスポート関数として提供される場合があります(バージョンによる)。上記は標準的な v2 API の例ですが、もし getCurrentWindow().availableMonitors() が必要な場合はそちらを使用してください。(最新 v2 では availableMonitors は window 名前空間の関数です)