# ClipSpider

Windows 用のクリップボード履歴・定型文貼り付けツールです。タスクトレイに常駐し、ホットキー一発で履歴ウィンドウを呼び出して、コピーした内容をすばやく再利用できます。

- 対応環境: Windows 10 / 11
- 開発環境: Delphi 12 (VCL)
- Version: 1.2
- Author: Tatsuyadev
---

## 主な機能

- **クリップボード履歴** — テキスト・画像・ファイルのコピーを自動で記録
- **インクリメンタル検索** — 入力するたびに履歴を絞り込み
- **ピン留め** — 大事な項目を先頭に固定（履歴の押し出し対象外）
- **定型文・画像テンプレート** — よく使う文章や画像をメニューから貼り付け
- **プレースホルダー** — 定型文に日付・時刻・クリップボード内容を埋め込み
- **キーボードだけで完結する操作**
- **暗号化保存** — 履歴は DPAPI でユーザー単位に暗号化して保存
- **パスワードマネージャー対応** — 監視除外フォーマットを尊重し、パスワード等を履歴に残さない

---

## 基本的な使い方

1. `ClipSpider.exe` を起動すると、タスクトレイに常駐します（ウィンドウは表示されません）
2. 普段どおりコピー（Ctrl+C）すると、自動で履歴に記録されます
3. 貼り付けたい場所にカーソルを置き、**Alt+C**（既定）で履歴ウィンドウを表示
4. 項目を選んで **Enter** またはクリック → ウィンドウが閉じ、自動で貼り付けられます

履歴ウィンドウはマウスカーソル位置に表示され、フォーカスを失うと自動で閉じます。

---

## ホットキー（グローバル）

| キー | 動作 |
|---|---|
| **Alt+C** | 履歴ウィンドウを表示（既定・変更可） |
| **Ctrl+Alt+Q** | ClipSpider を終了（既定・変更可） |

どちらも設定画面で変更できます。

---

## 履歴ウィンドウの操作

### キーボード

| キー | 動作 |
|---|---|
| 文字入力 | 履歴をインクリメンタル検索（絞り込み） |
| **↑ / ↓** | 項目を選択 |
| **Enter** | 選択項目を貼り付け |
| **Shift+Enter** | クリップボードにコピーのみ（貼り付けない） |
| **Ctrl+1〜9** | 表示中の 1〜9 番目を即貼り付け |
| **Ctrl+P** | 選択項目のピン留め / 解除 |
| **Ctrl+Del** | 選択項目を削除 |
| **Esc** | ウィンドウを閉じる |

ウィンドウ表示直後は検索ボックスにフォーカスがあるので、「開く → 打って絞り込む → Enter」の流れがそのまま使えます。

### マウス

| 操作 | 動作 |
|---|---|
| 左クリック | その項目を貼り付け |
| 左端のアイコン列をクリック（画像項目） | 画像をプレビュー表示（クリックまたは任意キーで閉じる） |
| 右クリック | コンテキストメニューを表示 |
| マウスホバー | テキスト全文をポップアップ表示 |

### 右クリックメニュー

- **貼り付け** / **コピーのみ（貼り付けない）**
- **パスをテキストとして貼り付け** — ファイル項目のみ表示
- **ピン留め / ピン留めを解除**
- **この項目を削除**
- ⏰**TimeStamp** — 現在日時（`yyyy/mm/dd hh:nn`）を貼り付け
- 📝**定型文** — 設定した定型文を貼り付け
- 🎨**画像テンプレート** — 設定した画像を貼り付け
- **履歴をすべてクリア**（確認あり・ピン留めも削除されます）
- **設定...** / **終了**

---

## 履歴に記録されるもの

| 種類 | アイコン | 動作 |
|---|---|---|
| テキスト | （なし） | そのまま記録。貼り付けはプレーンテキスト |
| 画像 | 🖼 | PNG で保存しサムネイル表示。同一画像は重複保存しない |
| ファイル | 📁 | エクスプローラーでコピーしたファイル。貼り付けるとファイルコピー、テキスト欄に貼るとパスが文字列で入る |
| ピン留め | 📌 | 種類を問わず先頭に固定 |

- 同じ内容を再度コピーすると、新規追加ではなく先頭へ移動します
- 最大件数（既定 30 件）を超えると、ピン留め以外の古い項目から消えます

---

## タスクトレイ

| 操作 | 動作 |
|---|---|
| 左クリック | 履歴ウィンドウを表示 |
| 右クリック | メニュー（履歴を表示 / 設定... / 終了） |

---

## 設定画面

トレイ右クリック → **設定...**（または履歴の右クリックメニュー）で開きます。

### 一般

| 項目 | 内容 | 既定値 |
|---|---|---|
| 履歴の最大件数 | 1〜500 | 30 |
| ウィンドウ幅 (px) | 100〜2000 | 240 |
| 行の高さ (px) | 10〜200 | 25 |

### ホットキー

「履歴を表示」「アプリを終了」の2つを任意のキーに変更できます。他のアプリと衝突するキーは避けてください。

### 定型文

名前と内容のペアで登録します。内容の改行は `\n` で指定します。

**プレースホルダー** — 内容に書いておくと貼り付け時に展開されます:

| 記述 | 展開結果 |
|---|---|
| `{date}` | 2026/07/12 |
| `{time}` | 15:30 |
| `{datetime}` | 2026/07/12 15:30 |
| `{clipboard}` | 現在のクリップボードのテキスト |
| `{now:書式}` | 任意書式。例 `{now:yyyy-mm-dd}` → 2026-07-12 |

`{now:}` の書式は Delphi の FormatDateTime 書式（`yyyy` 年 / `mm` 月 / `dd` 日 / `hh` 時 / `nn` 分 / `ss` 秒 など）です。

記述例:
```
お世話になっております。{date}の件、
{clipboard}
について確認いたしました。
```

### 画像テンプレート

名前と画像ファイルのフルパスのペアで登録します。PNG のほか、一般的な画像形式（JPEG 等）に対応しています。

---

## セキュリティ

### 履歴の暗号化

履歴は Windows の **DPAPI** でユーザーアカウント単位に暗号化して保存されます。ファイルを他の PC や他のユーザーにコピーしても復号できません。

> このため履歴ファイルのバックアップ・移行はできません（仕様）。設定ファイル（INI）は平文なので移行可能です。

### パスワードマネージャーとの連携

以下の監視除外フォーマットを尊重し、該当するコピーは**履歴に記録しません**（貼り付け自体は通常どおり可能です）:

- `ExcludeClipboardContentFromMonitorProcessing`（Microsoft 標準）
- `Clipboard Viewer Ignore`（KeePass 等が使用）
- `CanIncludeInClipboardHistory`（値が 0 のとき除外）

KeePass・1Password・Bitwarden など主要なパスワードマネージャーからのコピーは自動的に除外されます。

> 注意: この仕組みはコピー元アプリが目印を付けることが前提です。目印を付けないアプリからコピーした機密情報は履歴に残ります。誤って残った場合は Ctrl+Del で個別削除するか、「履歴をすべてクリア」してください。

---

## ファイル構成

実行ファイルと同じ場所に `ClipSpider` フォルダを作成し、その中にデータを保存します。

```
ClipSpider.exe
ClipSpider\
├─ ClipSpiderData.ini      設定ファイル（平文・移行可）
├─ ClipSpiderData.dat      履歴（DPAPI 暗号化・移行不可）
├─ Images\                 コピーした画像の本体 (PNG)
├─ ResizeImages\           サムネイル (BMP)
└─ Log\                    ログ（yyyymmdd_ClipSpider.log）
```

- 多重起動はできません（起動済みの場合はエラーメッセージを表示して終了します）

---

## 制限事項・既知の仕様

- 貼り付けは Ctrl+V のキー送信で行うため、**管理者権限で動作しているアプリ**には貼り付けられないことがあります（その場合は Shift+Enter でコピーだけ行い、手動で Ctrl+V してください）
- テキストは常にプレーンテキストとして記録・貼り付けされます（書式情報は保持しません）
- リモートデスクトップ経由のコピーは記録されますが、コピー元アプリの区別はできません
- ホットキーが他アプリと衝突している場合、履歴ウィンドウが開きません。ログにエラーが記録されるので、設定画面で別のキーに変更してください。
