スクリーン全体における現在のマウスカーソル座標(グローバル座標)を取得する方法を解説します。
JavaScript の mousemove イベントはウィンドウ内での座標しか取得できないため、画面全体の座標が必要な場合は Rust 側で取得します。
前提条件
特になし(カスタムコマンドとして実装します)。
1. バックエンドから作成する (Rust)
Tauri の Window 構造体が持つ cursor_position() メソッドを使用します。
これはウィンドウに関連付けられたカーソル位置を返します。
Rust 実装
src-tauri/src/lib.rs:
use tauri::{command, Window};
#[derive(serde::Serialize)]
struct CursorPos {
x: f64,
y: f64,
}
#[command]
fn get_cursor_position(window: Window) -> Result<CursorPos, String> {
// window.cursor_position() は Result<PhysicalPosition<f64>, ...> を返す
let pos = window.cursor_position().map_err(|e| e.to_string())?;
Ok(CursorPos { x: pos.x, y: pos.y })
}
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![get_cursor_position])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
2. フロントエンドから呼び出す (TypeScript)
Rust で定義したカスタムコマンド get_cursor_position を呼び出します。
import { invoke } from '@tauri-apps/api/core';
async function showCursorPos() {
try {
const pos = await invoke<{x: number, y: number}>('get_cursor_position');
console.log(`Cursor: (${pos.x}, ${pos.y})`);
} catch (e) {
console.error(e);
}
}
// 例えばボタンを押した瞬間の座標を取得
showCursorPos();
※ 完全なグローバル座標(ウィンドウ外も含む常に更新される座標)を監視するには、Rust 側のイベントループや rdev などの外部クレートが必要になる場合がありますが、上記の方法で「アプリがアクティブな時」や「コマンド呼び出し時点」の座標は取得可能です。