github.com/limit7412/KxNotifyUtils
0.1.0 / published Sep 15, 2026 / repository
監視対象(ソース)から通知を集め、通知先(シンク)へ中継する Windows 常駐アプリケーション。
KxNotifyUtils
KxNotifyUtils は、監視対象(ソース)から通知を集め、通知先(シンク)へ中継する Windows 常駐アプリケーションである。
ソースは Windows のデスクトップ通知と外部サービスの障害情報、シンクは XSOverlay の Notification API であり、 VR セッション中でも Discord やメールなどのデスクトップ通知を HMD 内で確認できるようにする。
配布物は KxNotifyUtils.exe の 1 ファイルである。
DLL の同梱も zip の展開も要らず、exe を任意の場所に置けば動く。
設定とログと生成した vrmanifest は %APPDATA%\KxNotifyUtils\ に書く。
できること
- Windows の通知を取得して XSOverlay へ中継する
- VRChat、YouTube、Steam などの障害を検知し、状態が変わったときに通知する
- アプリごとにアイコン、表示時間、通知音、音量、透明度、テキストの整形を変える
- SteamVR の起動に合わせて自動起動し、SteamVR の終了に合わせて終了する
- トレイから一時停止、テスト通知、設定の編集を行う
動作要件
- Windows 10 バージョン 1703 以降(実運用ターゲットは Windows 11)
- XSOverlay build 667 以降
- SteamVR(SteamVR 連携を使わない場合は無くても常駐できる)
使い方
- Releases から
KxNotifyUtils.exeを取得し、好きな場所に置く。 - exe を実行する。タスクトレイにアイコンが出る。
- Windows の設定でこのアプリに通知へのアクセスを許可する(初回起動時に設定画面へ誘導する)。
- トレイメニューの「テスト通知を送信」で XSOverlay に通知が出れば準備は終わりである。
初回起動時に SteamVR の自動起動へ登録する。 登録と解除はトレイメニューと設定ウィンドウの SteamVR タブから切り替えられる。
詳しい手順は セットアップガイド を参照する。 設定項目の一覧は 設定リファレンス にある。
既知の制約
-
通知アクセスの許可が要る。 Windows の設定 > プライバシーとセキュリティ > 通知 で、このアプリに通知へのアクセスを許可する必要がある。 パッケージ化されていないアプリではアプリ内からの許可要求が失敗することがあり、その場合は設定画面から手動で許可する。
-
通知センターに入らない通知は中継できない。 応答不可モード(フォーカスアシスト)やアプリ側の通知設定によって抑制された通知は取得できないことがある。 VR ゲームがフルスクリーン最適化で通知を抑制する場合が典型で、確実に中継したいアプリは応答不可モードの優先リストに入れておくとよい。
-
XSOverlay は localhost からの接続しか受け付けない。 別のマシンで出た通知を中継する構成は組めない。
-
表示スタイルの大枠は XSOverlay 側の設定に従う。 本ツールが決められるのはアイコン、表示時間、高さ、透明度、通知音、テキストの内容である。 通知の配置やフォントは XSOverlay の管轄になる。
-
実行ファイルの移動には自動で追従するが、SteamVR の再起動が要ることがある。 exe を移動すると次回の起動時に vrmanifest を作り直して登録し直す。 SteamVR の起動中に移動した場合、SteamVR 側が新しいパスを認識するのは再登録の後になるため、自動起動が一度失敗することがある。
ビルド
Windows で次を実行する。
pwsh scripts/build.ps1
必要なものは Visual Studio 2022 以降の C++ ビルドツール(cmake と rc.exe)と、Crystal の Windows 版(MSVC ツールチェーン)である。
手順の詳細と、Linux でどこまで検証できるかは 開発ガイド にまとめてある。
ライセンス
本体は MIT License で配布する。 依存するソフトウェアのライセンス表記は THIRD-PARTY-NOTICES.md にあり、同じ内容を実行ファイルへ埋め込んで設定ウィンドウの情報タブから読めるようにしている。
API
- Config
設定コンテキスト。 設定スキーマ(仕様書 5 章)の定義と、defaults と rules の継承解決を担う。
- Error
例外の記録と利用者への通知。
- KxNotifyUtils
composition root。 設定の解決、アダプタの選択、usecase への依存注入をここで一度だけ行う(仕様書 2.1 節)。
- Notify
中立ドメイン。 ソースにもシンクにも依存しない通知の形を定義する(仕様書 2.3 節)。
- Runtime
実行環境。 ファイルの置き場所、ログ、スケジューリング、トレイ、設定ウィンドウを担う。
- ServiceStatus
ソース実装:外部サービスの障害検知(issue #5)。
- SteamVR
SteamVR 連携コンテキスト。
- Update
更新の確認と置き換え(issue #10)。 GitHub Releases に出た新しい版を見つけて知らせ、取得して次の起動で置き換えるまでを担う。
- WinNotification
ソース実装:Windows のデスクトップ通知。 NotifListenerShim が返す JSON(仕様書 3.3 節)を読み、中立形式へ橋渡しする。
- XSOverlay
シンク実装:XSOverlay。 中立形式の Message を XSOverlay の通知オブジェクトへ変換する(仕様書 4.4 節)。