エクスプローラ拡張(サムネイル表示)DLLをC#, VB.NET, J#, C++/CLIから利用するサンプルコード集
Windowsのエクスプローラ上で,未定義ドキュメントの縮小表示(サムネイル生成)を行うシェル拡張DLL i_ShellExt を,各言語(C#, VB.NET, J#, C++/CLI, MFC)から利用・制御するための実装ノウハウとサンプルプロジェクト一式を公開します.
マルチ言語でWindows APIやレジストリ操作を行う際のブリッジ設計の参考にもなるかと思います.
サンプルコード・本体の入手先
-
サンプルプロジェクト(SDK)VS 2005 〜 向け (x86ベース):
i_ShellExt サンプルコード集をダウンロード (iShelExt_SDK_2013.zip) -
VS 2022 〜 環境向け (x64対応・ビルドエラー対策済):
i_ShellExt SDK 2026 をダウンロード (iShelExt_SDK_2026.zip) -
i_ShellExt 本体(DLLおよび登録ツール等)
i_ShellExt 本体(Vector)
※本体の動作環境:Windows 10 / 11 対応(フリーソフト・寄付歓迎) -
開発バックステージ・関連記事集
Blogger - i_ShellExt 関連記事一覧
概要とアーキテクチャ
このサンプルは,Visual Studio 2005のプロジェクトをベースに記述されていますが,VS 2022 / VS 2026 などのモダンな環境でも,ソリューションのアップグレードを行うことでそのままビルド・利用可能です.
Windowsエクスプローラのサムネイル(EMF:拡張メタファイル)のパス算出や生成処理の核となる共通ロジックは,C++/CLIで記述したブリッジ用のクラスライブラリ( Lib_ISE.dll )として実装しています.これにより,C#やVB.NETなどの.NET環境の言語からでも,シームレスにネイティブライクな処理を呼び出すことが可能です.
Visual Studio 2022環境でのビルドエラーについて
従来のプロジェクト(x86ターゲット)のまま VS 2022 などでビルドしようとすると,ターゲットフレームワークの競合や,System.BadImageFormatException(間違ったフォーマットのプログラムを読み込もうとしたエラー)が発生します.これらのエラーを回避して x64 環境で正常にビルドを通すための具体的な手順や,ログの解説については以下のBlogger記事に詳しくまとめましたので,移行の際は必ずご一読ください.
SmpCS(C# による iShelExt.dll 利用手順の解説)
C#で独自の拡張子に対してサムネイルを紐付ける際の,基本的な実装手順の流れです.
1. 参照の追加
プロジェクトの「参照の追加」から,同梱の Lib_ISE.dll を追加します.
(※ドキュメント名と同一の場所に独自にEMFを出力・管理する場合は,ブリッジDLLを使用せずネイティブ側と直接やりとりすることも可能です)
2. 画面設計
フォームに「開く(Open)」「保存(Save)」の2つのボタンを配置し,OpenFileDialog と SaveFileDialog を追加します.
3. 主要イベントの実装コード解説
■ Form1_Load(シェル拡張の登録)
Windowsのエクスプローラに縮小表示(サムネイル)の仕組みを認識させるため,レジストリの HKEY_CURRENT_USER\Software\Classes\.ise_cs\ShellEx\{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1} にi_ShellExtのGUID( {E5DF01A5-DA8F-4398-A99D-94A04B04CA2F} )を登録します.このサンプルでは独自のテスト用拡張子として .ise_cs を使用しています.
■ CreateEMF 関数の追加(サムネイルメタファイルの生成)
対象ドキュメントのパスから,対応するサムネイル用のEMFパスを求めます.
このサンプルでは,ファイル名と更新日時の文字列を描画したメタファイルを生成します.描画する文字の色は,現在の「時・分・秒」をそのまま「R・G・B」のカラー値として利用する実装にしています.
※C++版(
SmpCP)では,Lib_ISE.dllは利用せず,ドキュメントと同一フォルダに「ドキュメント名.EMF」を直接出力するシンプルなアプローチをとっています.
■ Form_Paint(プレビュー表示)
メンバ変数 NameEMF に有効なEMFファイルパスが格納されている場合,そのEMFをフォーム上に描画・表示して,アプリ側でもサムネイルの状態を確認できるようにしています.
■ Open_Click(ダイアログの連動)
「開く」ダイアログを表示し,ファイルが指定されると上記の CreateEMF を呼び出してサムネイルを生成します.(※サンプルコードの簡略化のため,ファイルそのものを開く内部処理は省略しています)
■ Save_Click(テストファイルの生成)
「保存」ダイアログを表示し,テスト用の .ise_cs ファイルを生成します.ファイルの中身自体には特殊なバイナリ構造はなく,ファイル名と保存日時をプレーンテキストとして書き込んでいます.
ライセンス・引用について
本サンプルコードの使用により生じたいかなる損害についても著作者は責任を負いません.引用時は以下のURLを明記してください.
URL: https://mish.work/
