## 仮想ディレクトリ（仮想フォルダ）機能 使い方

### 概要

仮想ディレクトリ機能は、ZIP・LZH・7Z・TAR等の書庫ファイルを、通常のフォルダのように
annsFM上で直接閲覧・操作できる機能です。  
書庫ファイル上で Shift+Ctrl+Enterキー等を押すと
書庫の中に「入り」、中のファイル・フォルダが通常のファイルリストと同様に表示されます。  
自己解凍形式(.exe)にも対応

設定は **annsFM.ini** に保存され、レジストリは使用しません。

---

### 対応書庫形式

| DLL | 対応形式 | 優先度 |
|---|---|---|
| TAR32.DLL | .TAR .TGZ .TAZ .TBZ .TBZ2 .GZ .BZ2 .XZ .TXZ .ZST .TZST | 1 |
| 7-ZIP32.DLL | .7Z .ZIP .TAR .TGZ .TBZ2 .RAR .CAB .ARJ .ZST .TZST | 2 |
| 7ZCA.DLL | 7zca.txtを見てください v0.6はgzip, bzip2関係(gz, tgz, bz2 等)を無効化 | 3 |
| UNZIP32.DLL | .ZIP .JAR .EGG | 4 |
| UNRAR32.DLL | .RAR .CBR | 5 |
| UNLHA32.DLL | .LZH .LHA | 6 |
| CAB32.DLL | .CAB | 7 |
| ZIP32J.DLL(非対応) | .ZIP | 8 |
| UNARJ32J.DLL | .ARJ | 9 |
| UnGCA32.DLL | .GCA | 10 |
| Yz1.DLL | .YZ1 | 11 |
| Bga32.DLL | .GZA .BZA | 12 |
| 書庫Susie SPI | annsFM-spm.txtに記述された物 | 13 |

同じ拡張子に複数のDLLが対応している場合は優先度が上のDLLが使用されます。  
LMZIP32.dllは非対応(リスト一覧取得などを投げても、応答を返してくれない（または無視される）)  
ZIP32J.DLLは非対応(圧縮専用のDLLのため書庫の中身を一覧取得したり、解凍したりするAPI無し。UNZIP32.DLLで追加圧縮に使うのでリストに入れてます。)  
自己解凍形式(.exe)にも対応

---

### 事前準備（初回のみ）

annsFMの設定画面（パラメータの設定 → VirtualDirタブ）で、仮想ディレクトリで使用する
統合アーカイバDLLやSusie plug-in（書庫用）の優先順位を設定できます。

- 優先度リストの上から順に、対応する拡張子のDLL/SPIを試します
- リストに `[書庫Susie SPI]` が含まれる場合、その位置で書庫Susie plug-inを試行します
- 画像表示用のSusie plug-inとは別に、書庫用のSusie plug-in設定が必要です
  （`m_sArcSPISettingFile` で指定される設定ファイルを使用）
- Susie plug-inの設定はannsFMsusieを使うのを推奨(未同梱 https://www.bonsfm.com/)
  - 画像Susie plug-inと同じ書き方です(サンプルに画像用annsFM-spi.txtと書庫用annsFM-spm.txtを同梱)

#### 書庫DLLの配置

対応DLLを以下に置いてください。

```
annsFM.exe と同じフォルダ
  例: C:\Software\annsFM\7-zip32.dll
```

#### 書庫Susie SPI の設定（任意）

上記DLLで対応できない書庫形式を Susie SPI で追加対応できます。  
例えばExtend convert Susie Plug-in(axextend.spi)で  
PDF/アニメーションGIF/WebP Animation/マルチページTIFF対応、中身BMP形式

| 設定項目 | 内容 |
|---|---|
| 書庫Susie plug-in を使用する | チェックを入れると有効 |
| 書庫SPIフォルダ | .spi ファイルの格納フォルダを指定 |
| 書庫SPI設定ファイル | 使用するSPIを記述したテキストファイルを指定 |

#### DLL優先度の変更

「DLL優先度設定」ボタンを押すと優先度設定ダイアログが開きます。

```
┌──────────────────────────────┐
│ 上にあるものが優先されます              │
│ ┌────────────────────┐  [上へ] │
│ │ TAR32.DLL          │  [下へ] │
│ │ 7-ZIP32.DLL        │        │
│ │ UNZIP32.DLL        │        │
│ │ UNRAR32.DLL        │        │
│ │ UNLHA32.DLL        │   [OK] │
│ └────────────────────┘        │
└──────────────────────────────┘
```

リストで項目を選択して「上へ」「下へ」で並べ替え → OK で確定。設定は `annsFM.ini` に保存されます。

---

### 基本操作

- 書庫ファイル（ZIP/LZH/7Z/TAR/TGZ/TBZ2等、対応形式は優先度設定に依存）にカーソルを合わせて
  **Shift+Ctrl+Enterキー** （メニューその他のKeyコマンド）
- 書庫内の一覧が表示される（フォルダ・ファイルの階層構造込み）
- タイトルバーに `[仮想ディレクトリ: 使用DLL名]` のように表示され、現在仮想ディレクトリ内であることが分かる

### 仮想ディレクトリから出る

- 一覧の先頭にある **`..`** で1つ上の階層に戻る
- 書庫のルートで `..` を選択すると、書庫があった通常フォルダに戻る

### サブフォルダへの移動

- 書庫内のフォルダにカーソルを合わせて Enter で移動
- 空のフォルダも一覧に表示される

---

## 一時展開フォルダについて

仮想ディレクトリ内の画像ファイルの表示等の操作では、annsFMがファイルを
一時的にディスクへ展開してから処理します。

- 展開先: **annsFM.exe のあるフォルダ配下の `_vdirtmp\afvXXXX\`**
  （annsFM.exeのパスが取得できない場合はWindowsの一時フォルダを使用）
- 同じファイルを再度開く場合、既に展開済みであれば再展開せず再利用します
  （上書き確認ダイアログの抑止）
- `_vdirtmp` フォルダは仮想ディレクトリ機能の動作中に作成されるため、
  annsFM終了時や任意のタイミングで手動削除しても問題ありません

---

## 対応コマンド一覧

仮想ディレクトリ内で使用できる主なコマンドです。  
**使用dllや書庫によって違います**  
ファイル名の変更は7-ZIP32.DLL/UNZIP32.DLLでzip/7zのみ対応(マーク非対応)
ですが不安定です事前にバックアップを取るなど注意して下さい  
削除は7-zip32.dll/unzip32.dll/UNLHA32.DLLのみ

### Keyコマンド

| キー | コマンド名 | 仮想ディレクトリ内での動作 |
|---|---|---|
| D | ファイルの削除 | 書庫内からファイル/フォルダを削除（`DeleteFromArchive`） |
| G | 画像ファイルの表示 | 一時展開してannsView(Gモード)で表示 |
| S | ファイルのソート | 書庫内一覧をソート |
| U | 圧縮ファイルの解凍（書庫内ファイルの解凍）[^2] | 解凍先フォルダを指定するダイアログを表示し、選択ファイルを展開・コピー |
| I | 圧縮ファイルの解凍[7zca.dll][^2] | 解凍先フォルダを指定するダイアログを表示し、選択ファイルを展開・コピー |
| N | ファイル名の変更[^1](マーク非対応) | 書庫内のファイル/フォルダ名を変更（`RenameInArchive`/`RenameDirInArchive`） |
| V | テキストファイルの表示 | 一時展開してannsView(テキストモード)で表示 |
| Y | ワイルドカードの設定 | 一覧の絞り込み表示（リスト再構築） |

[^1]: ファイル名の変更は7-ZIP32.DLL/UNZIP32.DLLでzip/7zのみ対応ですが不安定です事前にバックアップを取るなど注意して下さい
[^2]: 解凍オプションは使えない

### Shift+Keyコマンド

| キー | コマンド名 | 仮想ディレクトリ内での動作 |
|---|---|---|
| Shift+A | annsFMの起動 | 通常通り動作 |
| Shift+B | ファイル名のコピー | カレントファイル名をクリップボードにコピー |
| Shift+D | 特殊属性ファイルの表示 | 通常通り動作 |
| Shift+E | explorerの起動 | 通常通り動作 |
| Shift+G | 動画再生ソフトの起動 | 一時展開して動画再生ソフトの起動 |
| Shift+M | コマンドマクロの実行 | -KRなど1部だけ一時展開後、フルパスを引数として外部アプリを起動 |
| Shift+P | プロパティの表示 | 通常通り動作 |
| Shift+U | 書庫の簡易表示（書庫内書庫） | 一時展開してから書庫内一覧を表示 |

### Ctrl+Keyコマンド

| キー | コマンド名 | 仮想ディレクトリ内での動作 |
|---|---|---|
| Ctrl+A | インフォメーション2行表示 | 通常通り動作 |
| Ctrl+C | ファイルのコピー | 一時展開してHDROP形式でクリップボードにコピー |
| Ctrl+G | 動画再生(annsFMplayer) | 一時展開して動画プレイヤーで再生 |
| Ctrl+K | マスクで選択 | 通常通り動作 |
| Ctrl+S | サウンドファイルの再生 | 一時展開して動画プレイヤーで再生 |
| Ctrl+F | マーク反転フォルダ | 通常通り動作 |
| Ctrl+L | マーク反転フォルダファイル | 通常通り動作 |

### その他のKeyコマンド

| キー | コマンド名 | 仮想ディレクトリ内での動作 |
|---|---|---|
| Backspace | 一つ上のフォルダへ | 通常通り動作 |
| Space | ファイルの選択 | 通常通り動作 |
| Home / W | 全ファイルの選択と解除 | 通常通り動作 |
| Shift+Home / Shift+W | 全ファイルとフォルダの選択と解除 | 通常通り動作 |
| Ctrl+Home | リストの最初に移動 | 通常通り動作 |
| End | リストの最後に移動 | 通常通り動作 |
| Shift+← | 音声のミュート | 通常通り動作 |
| F7 | ソフトウェアの起動 | 一時展開してソフトウェアの起動 |
| F9 | イニシャルサーチ | 通常通り動作 |
| Tab | インクリメンタルサーチ | 通常通り動作 |
| アプリケーションキー | マウス右ボタンメニュー | 通常通り動作 |

---

## ドラッグ＆ドロップによる追加圧縮

仮想ディレクトリ内に、通常フォルダや別ウィンドウからファイル・フォルダをドロップすると、
書庫への追加圧縮を試みます（`AddToArchive`）。  
7-zip32.dll/unzip32.dllでzip/7zのみ

- コピー（Ctrlを押しながらドロップ等）: 元ファイルはそのまま、書庫に追加
- 移動（通常のドロップ）: 追加後に元ファイルを削除
- 追加に失敗した場合はエラーメッセージを表示しますが、仮想ディレクトリ内に留まります

---

## 右クリックメニューでの制限事項

仮想ディレクトリ内では、以下の操作が右クリックメニューでグレーアウト（無効化）されます。

- 貼り付け（Ctrl+V）
- 切り取り（Ctrl+X）
- ショートカットの作成（Shift+L）
- プロパティ（Shift+P）
- TAR/GZ/BZ2/XZ/ZST/RAR/CBR 形式の書庫では、削除（D）・名前の変更（N）も無効

---

## 対応していない書庫形式・機能

- **TAR系（.TAR/.TGZ/.TBZ2/.GZ/.BZ2/.XZ/.ZST/.TZST）および RAR/CBR**:
  書庫内の削除・名前変更・追加圧縮には対応していません（閲覧・解凍のみ）
- **ZST形式（.ZST/.TZST/.TAR.ZST）**:
- tar32.dllでは`.ZST.TZST/.TAR.ZST`は対応  
  7-zip32.dllでは`.ZST`対応`.TZST/.TAR.ZST`は二段階展開非対応  
  基本的にDLL優先度はtar32.dll/7-zip32.dllの順番にして`.ZST`の時だけ一時的に7-zip32.dll/tar32.dllにする
- 7zca.dll
  - 7zca32.dllを7zca.dllにリネーム、7z.dllも必要
  - 7zca.txtの対応拡張子の中の一部しか解凍出来ません(v0.6)  
TORO氏に確認した所、現在のバージョンである 0.6 では、gzip, bzip2関係(gz, tgz, bz2 等)を無効化していました。  
展開したときのファイルが tar の状態だったり、ファイル名が付かなかったりするため、一度無効にしたのを忘れていました。  
との回答
- Unicodeファイル名は非対応(書庫dllが対応してないようです)
  - 結合文字(べあ゚など)、記号、絵文字、外国語など

---

## 書庫DLL / Susie plug-in 優先度設定について

annsFMの設定画面（パラメータの設定 → VirtualDirタブ）で、仮想ディレクトリで使用する
統合アーカイバDLLやSusie plug-in（書庫用）の優先順位を設定できます。

- 優先度リストの上から順に、対応する拡張子のDLL/SPIを試します
- リストに `[書庫Susie SPI]` が含まれる場合、その位置で書庫Susie plug-inを試行します
- 画像表示用のSusie plug-inとは別に、書庫用のSusie plug-in設定が必要です
  （`m_sArcSPISettingFile` で指定される設定ファイルを使用）

---

## 設定の保存先

仮想ディレクトリ関連の設定は、レジストリではなく **annsFM.ini** に保存されます。

- 統合アーカイバDLL/Susie plug-inの優先度リスト
- ZIP圧縮時のDLL選択（LMZIP32 / 7-ZIP32、設定値: `m_nPackArchiver`）
- Susie plug-inのフォルダパス・設定ファイルパス

---
