# Windows 11 Cyber System Monitor Widget

Windows 11専用のデスクトップ常駐型サイバーシステムモニターウィジェット（Rust製）。  
CPU / GPU (iGPU & dGPU) / メモリ / ディスク / ネットワーク / バッテリー / Uptime 等のシステム状態をリアルタイムに美しく透過HUD表示します。

---

## 1. アプリケーション概要

- **サイバー / SF / HUD風デザイン**: ネオンシアン、エレクトリックブルー、アンバー、アラートレッドを基調とした洗練されたデザイン。
- **背景透過 (基本透過率 70%)**: Windows 11 のデスクトップが透けて見える半透明フレームレス構造。
- **低負荷・省電力**: アイドル時CPU使用率 0.5% 未満を目標に設計。バックグラウンドスレッド収集とイベント駆動再描画を採用。
- **クリック透過 (Ghost Mode)**: `WS_EX_TRANSPARENT` による入力透過に対応。ホットキー（`Ctrl + Alt + X`）またはタイトルバーのボタンから動的に切り替え可能。
- **Intel Hybrid Architecture 対応**: P-core (Performance) と E-core (Efficient) を正確に判定・分離表示。
- **iGPU & dGPU 個別監視**: Intel iGPU と NVIDIA GeForce RTX 4060 等の dGPU を区別して監視（NVML連携）。
- **リアルタイム折れ線グラフ**: CPUおよびGPU使用率の直近60秒履歴を表示。
- **Compact Mode**: デスクトップの隅に邪魔にならず常駐できるサマリー表示モード（ワンクリック切り替え）。
- **警告システム (Alerts)**: CPU/GPU温度、使用率、RAM、VRAM、ディスク空き容量、バッテリー残量の閾値超過時にパネルを動的強調表示。

---

## 2. スクリーンショット配置場所

アプリケーションの動作スクリーンショットは以下のディレクトリに配置されます：
- `assets/screenshots/`
  - `cyber_monitor_full.png` (通常詳細表示)
  - `cyber_monitor_compact.png` (Compact Mode)
  - `cyber_monitor_alert.png` (警告発生時の赤色発光HUD)

---

## 3. 必要環境

- **OS**: Windows 11 64-bit (x86_64)
- **CPU**: Intel 12th/13th/14th世代 (P-core/E-core対応) または AMD Ryzen
- **GPU**:
  - NVIDIA GeForce GPU (ドライバ導入済み環境でNVMLによる温度/クロック/VRAM/電力取得)
  - Intel iGPU (DXGIによる認識)
- **ディスプレイ**: 単一または複数ディスプレイ（マルチモニター対応）
- **Rust Toolchain**: Rust Stable 1.80+ (開発・動作確認: Rust 1.94.0)

---

## 4. ビルド方法 & 実行方法

### 開発ビルドと実行
```powershell
# デバッグ実行
cargo run

# チェック・テスト
cargo check
cargo test
cargo clippy
```

### リリースビルド
```powershell
# 最適化リリースバイナリのビルド
cargo build --release

# 生成先:
# target\release\cyber-system-monitor.exe
```

---

## 5. 使用ライブラリ（Crates）と選定理由

| クレート名 | バージョン | 選定理由・用途 |
| :--- | :--- | :--- |
| `eframe` / `egui` | `0.29` | Windows 11での完全透過ウィンドウ (`transparent: true`) と超低負荷レンダリングを両立。Immediate Mode によるリアクティブなHUD描画。 |
| `egui_plot` | `0.29` | 直近60秒のCPU/GPU使用率リアルタイム折れ線グラフのHUD風描画。 |
| `windows` | `0.58` | Microsoft公式Win32 APIラッパー。ウィンドウ透過、DWM、最前面固定、クリック透過、CPUトポロジー、ICMP Ping、電源管理等を安全に呼出し。 |
| `sysinfo` | `0.33` | CPU総使用率、論理コア別使用率、RAM容量、ネットワーク送受信量、プロセス一覧、ディスク容量の高精度取得。 |
| `nvml-wrapper` | `0.10` | NVIDIA公式NVMLバインディング。dGPU使用率、温度、Core/Memory Clock、VRAM（総/使用/空き）、消費電力(W)の直接取得。 |
| `chrono` | `0.4` | アナログ/デジタル時計の時分秒針角計算、月間カレンダー（日本語ロケール曜日対応）、Uptime/Boot Time計算。 |
| `crossbeam-channel` | `0.5` | UI描画スレッドとバックグラウンドセンサー収集ワーカースレッド間の超低遅延・スレッドセーフ通信。 |
| `serde` / `toml` | `1.0` / `0.8` | 設定ファイル (`config.toml`) のシリアライズ/デシリアライズ。 |
| `directories` | `5.0` | `%APPDATA%` 配下の安全な設定ファイル保存先パス解決。 |
| `tracing` / `tracing-subscriber` | `0.1` / `0.3` | 高速で堅牢な非同期ログ出力。 |

---

## 6. Windows API の利用箇所

1. **ウィンドウ低レベル制御 (`Win32::UI::WindowsAndMessaging`, `Win32::Graphics::Dwm`)**:
   - `SetWindowLongPtrW` / `GetWindowLongPtrW`: `WS_EX_TRANSPARENT`（クリック透過）、`WS_EX_LAYERED`、`WS_EX_TOPMOST` の動的制御。
   - `DwmExtendFrameIntoClientArea`: クライアント領域全体へのDWM透過フレーム拡張。
   - `RegisterHotKey` / `UnregisterHotKey`: グローバルホットキー (`Ctrl + Alt + X`) によるクリック透過切り替え。
2. **CPUトポロジー (`Win32::System::SystemInformation`)**:
   - `GetLogicalProcessorInformationEx` (`RelationProcessorCore`): 各物理コアの `EfficiencyClass` (P-core: 1, E-core: 0) と `GroupMask` を解析し、Intel Hybrid ArchitectureのP/Eコア使用率を正確に算出。
3. **ディスプレイ・リフレッシュレート (`Win32::Graphics::Gdi`)**:
   - `EnumDisplayMonitors`, `GetMonitorInfoW`, `EnumDisplaySettingsW`: 接続されている全ディスプレイの解像度および実リフレッシュレート (`dmDisplayFrequency` Hz) を取得。
4. **ネットワーク ICMP Ping (`Win32::NetworkManagement::IpHelper`)**:
   - `IcmpCreateFile`, `IcmpSendEcho`, `IcmpCloseHandle`: 外部プロセス（ping.exe）を生成せず、ユーザー権限で動作するWindows標準ICMP APIによる高速Ping計測。
5. **バッテリー・電源 (`Win32::System::Power`)**:
   - `GetSystemPowerStatus`: バッテリー残量、AC電源状態、充電/放電フラグの取得。
6. **Windows稼働時間 (`Win32::System::SystemInformation`)**:
   - `GetTickCount64`: システム起動時からのミリ秒単位の経過時間。
7. **Windows自動起動 (`Win32::System::Registry`)**:
   - `RegOpenKeyExW`, `RegSetValueExW`, `RegDeleteValueW`: `HKCU\Software\Microsoft\Windows\CurrentVersion\Run` への登録・解除。

---

## 7. 外部API (NVML) の利用箇所

- NVIDIA GPU搭載環境では、公式ドライバに内包される `nvml.dll` を動的リンクします。
  - `nvmlDeviceGetUtilizationRates`: GPU使用率
  - `nvmlDeviceGetTemperature`: GPUコア温度
  - `nvmlDeviceGetClockInfo`: Graphics Clock (Core) / Memory Clock
  - `nvmlDeviceGetMemoryInfo`: VRAM Total / Used / Free
  - `nvmlDeviceGetPowerUsage`: 消費電力 (mW -> W換算)
  - `nvmlDeviceGetGraphicsRunningProcesses` / `ComputeRunningProcesses`: dGPU使用プロセス一覧と各VRAM使用量

---

## 8. 既知の制限 & 管理者権限が必要になる機能

1. **CPUコア温度 / CPU Package Power**:
   - 一般的なWindowsユーザー空間APIでは、リング0（カーネルドライバ）権限がない場合、MSR (Model-Specific Register) への直接アクセスが制限されています。
   - ドライバプロバイダ（LibreHardwareMonitor WMI等）が存在しない場合は、架空の数値を捏造せず **`N/A (Requires Driver)`** と明記します。
2. **実ゲーム FPS (Active Game FPS)**:
   - ディスプレイのリフレッシュレート（Hz）は全モニター分常時正確に表示されます。
   - 個別ゲームの描画FPS（PresentMon方式）はETWセッションの起動に管理者権限（Administrator）が必要です。一般ユーザー権限では **`N/A (Standby / In-Game Only)`** と明示し、リフレッシュレートをFPSとして偽装しません。
3. **PC全体推定消費電力 (Estimated Power)**:
   - PC全体の実消費電力は、外付けワットチェッカーがない限りソフトウェア単体での完全実測は不可能です。CPU実測値 + GPU実測値 + システムベースライン電力から算出した値を **`Estimated Power`** として明示しています。

---

## 9. センサー取得できない環境について

本ウィジェットは、**「取得できないハードウェア情報を架空の値で表示しない」「モックデータを本番値として表示しない」** という原則を徹底しています。  
センサー値の型に `SensorValue<T>`（`Value`, `Unavailable`, `Unsupported`, `PermissionDenied`）を定義し、取得不可時は `N/A` や `--` として安全にハンドリングします。特定のセンサーが失敗しても、アプリケーション全体がクラッシュすることなく他モジュールは正常に稼働を継続します。
