Skip to content

Instantly share code, notes, and snippets.

@mimikun
Created January 29, 2026 06:23
Show Gist options
  • Select an option

  • Save mimikun/023cb904302f87be516354e13f663cd8 to your computer and use it in GitHub Desktop.

Select an option

Save mimikun/023cb904302f87be516354e13f663cd8 to your computer and use it in GitHub Desktop.
Raycast制御ツール

Raycast Game Monitor - 仕様書

概要

特定のゲームアプリケーション起動中にRaycastを自動的に終了し、ゲーム終了後に再起動するWindowsバックグラウンド監視システム。

目的

FPSゲームなどでRaycastのホットキー(Ctrl+Space)が誤発動するのを防ぐため、ゲームプレイ中はRaycastプロセスを完全に終了させる。

システム要件

  • OS: Windows 10/11
  • PowerShell 5.1以上
  • Raycastがインストールされていること

ファイル構成

配置場所

C:\Scripts\RaycastMonitor\
├── RaycastGameMonitor.ps1  (メインスクリプト)
├── GameList.txt            (ゲームリスト設定ファイル)
├── ManageGames.ps1         (管理補助スクリプト)
└── monitor.log             (自動生成されるログファイル)

各ファイルの仕様

1. RaycastGameMonitor.ps1 (メインスクリプト)

機能

  • GameList.txtから監視対象ゲームのプロセス名を読み込み
  • 2秒ごとにゲームプロセスの起動状態を監視
  • ゲーム起動検出時にRaycastプロセスを強制終了
  • ゲーム終了検出時にRaycastを再起動
  • すべての動作をログファイルに記録

処理フロー

  1. スクリプト起動時の初期化

    • スクリプト自身のディレクトリパスを取得
    • 設定ファイル・ログファイルのパスを設定
    • Raycastの実行ファイルパスを環境変数から取得 ($env:LOCALAPPDATA\Raycast\Raycast.exe)
  2. 設定ファイルの確認と自動生成

    • GameList.txtが存在しない場合、デフォルト設定で自動作成
    • デフォルトゲーム: r5apex, Overwatch, GenshinImpact, YuanShen
  3. ゲームリストの読み込み

    • GameList.txtを読み込み
    • #で始まる行(コメント)を除外
    • 空行を除外
    • 前後の空白をトリム
    • 配列として保持
  4. 無限ループでの監視処理

   while (true):
       gameRunning = false
       runningGame = null
       
       for each game in gameNames:
           if ゲームプロセスが存在:
               gameRunning = true
               runningGame = game
               break
       
       if gameRunning and not raycastStopped:
           Raycastプロセスを強制終了
           ログ出力: "ゲーム検出 (ゲーム名) - Raycast終了"
           raycastStopped = true
       
       else if not gameRunning and raycastStopped:
           Raycastを起動
           ログ出力: "ゲーム終了 - Raycast起動"
           raycastStopped = false
       
       2秒待機

ログ出力関数仕様

  • 関数名: Write-Log
  • タイムスタンプ形式: yyyy-MM-dd HH:mm:ss
  • 出力先: コンソール + ログファイル(追記モード)
  • フォーマット: [タイムスタンプ] メッセージ

エラーハンドリング

  • ゲームプロセスが見つからない場合: エラーを抑制(-ErrorAction SilentlyContinue)
  • Raycastプロセスが見つからない場合: エラーを抑制
  • Raycast実行ファイルが見つからない場合: ログにエラー出力

変数

  • $scriptDir: スクリプトのディレクトリパス
  • $gameListFile: GameList.txtのフルパス
  • $logFile: monitor.logのフルパス
  • $raycastPath: Raycastの実行ファイルパス
  • $gameNames: 監視対象ゲームのプロセス名配列
  • $raycastStopped: Raycastが停止中かどうかのフラグ(boolean)
  • $gameRunning: ゲームが起動中かどうかのフラグ(boolean)
  • $runningGame: 現在起動中のゲーム名

2. GameList.txt (設定ファイル)

仕様

  • エンコーディング: UTF-8
  • 形式: 1行1プロセス名
  • コメント: #で始まる行は無視される
  • 空行は無視される
  • プロセス名は拡張子なし(例: r5apex.exer5apex)

デフォルト内容

# 監視するゲームのプロセス名を1行ずつ記載
# 行頭に#でコメント可能
r5apex
Overwatch
GenshinImpact
YuanShen

プロセス名の確認方法

  • タスクマネージャー → 詳細タブで確認
  • または以下のPowerShellコマンドで確認:
  Get-Process | Where-Object { $_.MainWindowTitle -ne "" } | 
      Select-Object Name, MainWindowTitle | Format-Table -AutoSize

3. ManageGames.ps1 (管理補助スクリプト)

機能

  • 現在の監視対象ゲーム一覧を表示
  • GameList.txtを編集(メモ帳で開く)
  • 現在起動中のアプリケーション一覧を表示

インターフェース

=== Raycast Game Monitor - ゲームリスト管理 ===

現在の監視対象ゲーム:
  - r5apex
  - Overwatch
  - GenshinImpact
  - YuanShen

1. ゲームリストを編集
2. 現在起動中のアプリ一覧を表示
3. 終了

選択してください (1-3):

動作

  • 選択1: notepadでGameList.txtを開く
  • 選択2: 起動中のアプリケーション一覧をテーブル形式で表示(Name, MainWindowTitle)
  • 選択3: スクリプト終了

4. monitor.log (ログファイル)

仕様

  • 自動生成(初回実行時)
  • エンコーディング: UTF-8
  • 追記モード
  • ログローテーション: なし(手動削除)

ログ例

[2026-01-27 14:30:15] 監視開始 - 対象ゲーム: r5apex, Overwatch, GenshinImpact, YuanShen
[2026-01-27 14:35:22] ゲーム検出 (r5apex) - Raycast終了
[2026-01-27 16:12:45] ゲーム終了 - Raycast起動

タスクスケジューラ設定

設定項目

全般タブ

  • 名前: Raycast Game Monitor
  • 説明: ゲーム起動時にRaycastを自動終了・再起動
  • セキュリティオプション: ユーザーがログオンしているときのみ実行する
  • 最上位の特権で実行する: ☑ チェック

トリガータブ

  • トリガー種類: ログオン時
  • 設定: 任意のユーザー、または特定ユーザー

操作タブ

  • 操作: プログラムの開始
  • プログラム/スクリプト: powershell.exe
  • 引数の追加:
  -WindowStyle Hidden -ExecutionPolicy Bypass -File "C:\Scripts\RaycastMonitor\RaycastGameMonitor.ps1"

条件タブ

  • コンピューターをAC電源で使用している場合のみタスクを開始する: ☐ チェック解除
  • その他はデフォルト

設定タブ

  • タスクが既に実行中の場合に適用される規則: 新しいインスタンスを開始しない
  • その他はデフォルト

使用方法

初回セットアップ

  1. C:\Scripts\RaycastMonitor\ フォルダを作成
  2. 3つのPowerShellスクリプトを配置
  3. タスクスケジューラで自動起動を設定
  4. PC再起動またはスクリプトを手動実行

ゲームの追加・削除

  1. ManageGames.ps1を実行
  2. オプション1を選択してGameList.txtを編集
  3. 新しいゲームのプロセス名を追加(1行1プロセス)
  4. 保存して閉じる
  5. 次回監視ループで自動的に反映される(再起動不要)

監視の一時停止

  • タスクマネージャーで powershell.exe (RaycastGameMonitor.ps1) を終了
  • または、タスクスケジューラでタスクを無効化

トラブルシューティング

  • monitor.logでログを確認
  • Raycastのパスが正しいか確認: %LOCALAPPDATA%\Raycast\Raycast.exe
  • ゲームのプロセス名が正しいか確認(タスクマネージャー)

セキュリティ考慮事項

  • アンチチートソフトウェアとの干渉なし(プロセス監視のみ、キー入力傍受なし)
  • PowerShell実行ポリシーをBypassで実行(署名なしスクリプトの実行を許可)

制限事項

  • 監視間隔は2秒(調整可能)
  • Raycastが異なるパスにインストールされている場合は手動でパスを修正が必要
  • 同名のプロセスが複数存在する場合、最初に見つかったものを対象とする

今後の拡張案

  • GUI設定ツール
  • ログローテーション機能
  • 特定のゲームごとに異なる動作を設定
  • 通知機能(ゲーム検出時にトースト通知)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment