- PR -

エクスプローラの縮小版を表示する方法について

投稿者投稿内容
もずみん
会議室デビュー日: 2007/10/03
投稿数: 3
投稿日時: 2007-10-03 12:18
いつも勉強させていただいています。

エクスプローラを縮小版で表示すると、jpegやgifなどはサムネイルで表示されます。
独自形式の画像でも縮小表示されるようにしたいのですが、どこから手を着けたらよいでしょうか?
Susieのプラグインなどでは実現できるようですが、他のアプリを利用することなく、作りたいのです。

ご存知の方いらっしゃいましたらご教示のほどお願いいたします。
aetos
会議室デビュー日: 2005/01/27
投稿数: 16
投稿日時: 2007-10-03 12:57
縮小表示自体は、IExtractImage インターフェイスを実装した COM オブジェクトを作成することで可能です。
Susie プラグイン等を使わずに独自形式を表示するためには、その独自形式をビットマップ(*.bmp)に変換するコードを自分で書く必要があります。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-10-03 13:02
こんにちは。

キーワードとしては"Shell Extension", "IExtractImage2"あたり
で検索するとよいと思います。

サンプルコードとしてこんなのを見つけました
Create Thumbnail Extractor objects for your MFC document types(THE CODE PROJECT)

見失いましたが、検索しているときに、どっかの英語の掲示板で
「.NETでは危険だからアンマネージのC++で開発してね。1つのプロセスでロードできる.NETのバージョンは1つだから…」
みたいなことが書いてありました。
まあ、Windowsのシェル拡張全般に言えることですね。

渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-10-03 13:16
最新のドキュメントは

Thumbnail Providers
http://msdn2.microsoft.com/en-us/library/bb776855.aspx

のようです。

詳しくは調べていませんが、IExtractImage2 は Vista で扱いが変わったようで「動かなくなった」的な事例をいくつかみかけました。

Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-10-03 17:19
こんにちは。

引用:

渋木宏明(ひどり)さんの書き込み (2007-10-03 13:16) より:
最新のドキュメントは
Thumbnail Providers
http://msdn2.microsoft.com/en-us/library/bb776855.aspx
のようです。
詳しくは調べていませんが、IExtractImage2 は Vista で扱いが変わったようで「動かなくなった」的な事例をいくつかみかけました。



おっと、Vistaでは新たなインターフェイスになっていましたか^^;

Building Thumbnail Providers(msdn2)
引用:

The IThumbnailProvider interface has been introduced to make providing a thumbnail easier and more straightforward than in the past, when IExtractImage or IExtractImage2 would have been used instead. Note, however, that existing code that uses IExtractImage or IExtractImage2 is still valid under Windows Vista.


一応、VistaでもIExtractImage/IExtractImage2は有効だとは記述されていますが…
Vista以前の環境を考慮すると、両方のインターフェイスを実装しとくのが良さそうですね。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-10-03 18:43
引用:

一応、VistaでもIExtractImage/IExtractImage2は有効だとは記述されていますが…



給仕様が無くなるとしても、新仕様が投入されてからも2〜3代は移行期間として猶予されるパターンが多いですからね。

ただ、↑のドキュメントを検索している途中「自前アプリで IExtractImage2 を使って縮小イメージを表示していたが、Vista では縮小イメージが表示されなくなった」ような話をみかけたので、Vista では「何か」あるのかもしれません。


[ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2007-10-03 19:16 ]
もずみん
会議室デビュー日: 2007/10/03
投稿数: 3
投稿日時: 2007-10-03 22:49
みなさま

情報ありがとうございます。
自分なりに調べてはいたのですが、まったく情報にたどり着けなかったので助かります。

予想はしていたのですが、やはりC++で実装すべきなのですね。
これからチャレンジしてみます。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-10-03 23:12
こんばんは。

引用:

もずみんさんの書き込み (2007-10-03 22:49) より:
予想はしていたのですが、やはりC++で実装すべきなのですね。



アンマネージ(ネイティブ)で[追記]且つ、COM開発可能で[/追記]あれば、C++でなくてもよいと思いますが、
私の中のベストな選択はC++ですね。

引用:

Tdnr_Symの書き込み (2007-10-03 13:02) より:
見失いましたが、検索しているときに、どっかの英語の掲示板で
「.NETでは危険だからアンマネージのC++で開発してね。1つのプロセスでロードできる.NETのバージョンは1つだから…」
みたいなことが書いてありました。



再度探してみたら見つかりました。
Create a Shell Extension Handler thumbnail extractor with .net? (MSDN Forums)
引用:

Jesse Kaplanさん(モデレータ)の書き込み
Unfortunately unmanaged C++ is really the only way to go here.
Writing in-process shell extensions in managed code is actually a very dangerous thing to do because it has the effect of injecting your managed code (and the .NET Framework) into every application on the machine that has a file open dialog.
The problems occur because only one version of the .NET Framework can be loaded in a process at any given time (other shared components such as java and msxml have the same property and thus the same restriction).
If you write your shell extension using the 2.0 .NET Framework and an application built with the 1.1 .NET Framework uses a file open dialog, your shell extension will fail because it can not run on an earlier version. Things can get even worse if your shell-extension manages to get loaded in a process before another applications managed code does: your extension may force an existing application onto a different runtime version than the one it was expecting and cause it to fail.
Because of these problems we strongly recomend against using any single-instance-per-process runtime or library (such as the .NET Framework, java, or msxml) in an in-process shell extension.




[ メッセージ編集済み 編集者: Tdnr_Sym 編集日時 2007-10-03 23:30 ]

スキルアップ/キャリアアップ(JOB@IT)