# Monitor

> macOS 原生系统监控悬浮窗 —— 实时 CPU/GPU/内存/Swap + Top进程，半透明可拖动，一切可定制。

## 截图

点击菜单栏 <img src="https://img.shields.io/badge/⏲-Monitor-blue" height="18"> 图标呼出悬浮窗：

```
┌──────────────────────┐
│ ⏲ Monitor   21:30:00 ✕│
│──────────────────────│
│  CPU   ████████░░ 42% │
│  10 核心 · Apple M2 Pro│
│                       │
│  内存  ███░░░░░░░ 35% │
│  5.6 / 16 GB          │
│                       │
│  CPU 消耗 Top          │
│  WindowServer  12.3%  │
│  Code          8.1%   │
└──────────────────────┘
```

## 功能

- **CPU / GPU / 内存 / Swap** 实时占用率
- **Top 进程** 按 CPU 和内存消耗排列
- **5 种计量器样式**：圆环、条状、纯文本、扇形、紧凑横条
- **灵活布局**：每个模块独立指定行号 + 左/右/全宽列位
- **半透明悬浮窗**：毛玻璃 HUD 风格，任意拖动
- **菜单栏图标**：左键切换显隐，右键菜单（设置、退出）
- **独立设置窗口**：显示内容、样式、行号列位、宽高、字体、透明度、刷新率全部可调

## 安装

### 方式一：DMG
下载 `Monitor.dmg`，将 `FloatingMonitor` 拖入 Applications。

### 方式二：源码运行
```bash
git clone git@git.cyjai.com:JOJO/Monitor.git
cd Monitor
swift run
```

## 要求

- macOS 14 (Sonoma) 或更高
- Xcode 16+ 或 Swift 6.2 工具链

## 使用

1. 启动后菜单栏出现仪表盘图标
2. **左键点击**图标 → 切换悬浮窗显隐
3. **右键点击**图标 → 展开菜单（显示设置 / 退出）
4. 悬浮窗可**任意拖动**，设置中可调宽高

## 技术

| 层面 | 实现 |
|------|------|
| CPU 采样 | `host_statistics` 双采样差值 |
| GPU 占用 | IOKit `IOAccelerator` → `PerformanceStatistics` |
| 内存/Swap | `vm_statistics64` / `sysctl vm.swapusage` |
| 进程列表 | `ps -eo pid,%cpu,rss,comm` |
| UI | SwiftUI + AppKit `NSHostingView` |
| 毛玻璃 | `NSVisualEffectView` `.hudWindow` + `.behindWindow` |

## 许可

MIT
