TreePaste
コピーしたファイルをフォルダー構成ごと貼り付けできる Windows ツールです。 ツリーで階層を選んで、任意のレベルからペーストを実行できます。
概要
TreePaste は、エクスプローラーでコピーしたファイル・フォルダーを、元のフォルダー構成を保ったまま貼り付けるためのデスクトップアプリです。 単純な一括貼り付けではなく、コピー元の階層をツリー表示し、どの階層から貼り付けるかを選択できます。
解決する課題
エクスプローラーの貼り付けで得られる結果は、実質的に 2 通りしかありません。 フォルダーをコピーすればそのフォルダー自体を含むサブツリー全体が貼り付けられ、 中のファイルをコピーすれば構造が失われたフラットなファイル群になります。 「構造は保ったまま、3 階層下から始めたい」という指定はできません。
たとえば、プロジェクトの階層深くに置かれた報告書を考えます。
D:\Projects\ClientA\2026\Reports\Q1\summary.xlsx
D:\Projects\ClientA\2026\Reports\Q1\appendix.xlsx
D:\Projects\ClientA\2026\Reports\Q2\summary.xlsx
ここで Reports と Q1 のフォルダーは残しつつ、
Projects・ClientA・2026 は落として
Reports\Q1\summary.xlsx の形で貼り付けたい場合、エクスプローラーでは一度の操作で実現できません。
通常はすべて貼り付けてから不要な親フォルダーを手作業で削除することになり、この工程でミスが起きます。
TreePaste はコピーした項目をツリーとして表示し、貼り付けの起点となる階層をクリックで指定できます。
Reports を選べば、貼り付け先には Reports\Q1\summary.xlsx が作られ、それより上の階層は破棄されます。
開発背景
複数のファイルやフォルダーを別の場所へ移す作業では、不要な親フォルダーまで含めて貼り付いてしまったり、逆に必要な構造が崩れてしまったりすることがあります。 TreePaste は、コピー元の構造を視覚的に確認しながら貼り付け起点を決められるようにすることで、こうした手戻りを減らすことを目的に開発しました。
設計方針として重視したのは、作業の流れを止めないことです。 ウィンドウを占有せずタスクトレイに常駐し、アイコンを探してクリックするのではなくグローバルショートカットで呼び出せるようにし、 貼り付け先はダイアログで選ばせるのではなく、すでに目の前で開いているエクスプローラーから推定するようにしました。
主な機能
- 起動時にタスクトレイへ常駐し、バックグラウンドで動作
- Ctrl+Alt+V でいつでもウィンドウを呼び出し
- クリップボード内のファイル・フォルダーをツリー表示
- ツリー上でフォルダー階層を選択し、貼り付け起点を指定
- アクティブなエクスプローラーウィンドウのパスを貼り付け先として自動検出
- エクスプローラーを検出できない場合はデスクトップを貼り付け先に設定
- Fluent デザインに対応し、Windows のカラーモードに合わせて配色が自動で切り替わる
使い方
- TreePaste を起動します(タスクトレイに常駐します)。
- エクスプローラーで貼り付けたいファイル・フォルダーをコピーします(Ctrl+C)。
- 貼り付け先フォルダーをエクスプローラーで開きます。
- Ctrl+Alt+V で TreePaste のウィンドウを表示します。
- 表示されたツリーから貼り付け起点の階層を選択します。
- 貼り付けを実行します。
手順 3 は見た目以上に重要です。貼り付け先は、ショートカットを押した時点で最前面にあるエクスプローラーウィンドウから読み取ります。 呼び出す前に目的のフォルダーを前面に出しておくことが、貼り付け先を正しく決めるための条件になります。
貼り付け先の検出方法
TreePaste は貼り付け先をユーザーに選ばせるのではなく、直前まで見ていたウィンドウから読み取ります。 検出は次の 3 段階で行っています。
-
GetForegroundWindowで最前面のウィンドウを取得し、GetWindowThreadProcessIdでそのウィンドウを所有するプロセスを特定します。 -
プロセスが
explorerであれば、Shell.ApplicationCOM オブジェクト経由で開いているシェルウィンドウを列挙し、HWNDが最前面ウィンドウのハンドルと一致するものを探して、そのLocationURLから表示中のフォルダーパスを取得します。 - 最前面がエクスプローラーではない場合、あるいはシェル側の検索で該当が得られなかった場合は、 デスクトップにフォールバックし、貼り付け先が常に有効になるようにします。
最初に見つかったシェルウィンドウを使うのではなく、ウィンドウハンドルの一致で絞り込んでいる点がポイントです。 これにより、エクスプローラーを複数開いている状況でも、貼り付け先が任意のウィンドウではなく、 実際にフォーカスのあったウィンドウに定まります。
動作上の注意点
- 貼り付け先はフォーカスに追従します。 Ctrl+Alt+V を押した時点でエクスプローラー以外のウィンドウ(ブラウザーやエディターなど)が最前面にあると、 読み取るべきエクスプローラーのパスが存在しないため、貼り付け先はデスクトップになります。 先に貼り付け先フォルダーのウィンドウをクリックしてください。
- ツリーはウィンドウを開いた時点のクリップボードの内容を反映します。 先にファイルをコピーしてから TreePaste を呼び出してください。
- Ctrl+Alt+V はシステム全体のショートカットです。 他の常駐アプリが同じ組み合わせをすでに登録している場合、先に登録した側にキーが渡ります。
- 配色は Windows のカラーモードに追従します。 ライトモードとダークモードの切り替えは、アプリ側の設定を変更しなくても反映されます。
動作環境
- OS: Windows 10 / 11 (x64)
- .NET: .NET 10
- UI フレームワーク: WPF
ソースからのビルド
.NET 10 SDK が導入されていれば、ソリューションをそのままビルドできます。
dotnet build src/TreePaste/TreePaste.slnx
実行可能な形にする場合は、win-x64 ランタイム向けに Release 構成で発行します。
出力は src/publish/win-x64/ 配下に書き出されます。
リポジトリ
ソースコードおよび利用方法の詳細は GitHub で公開しています。