Skip to content
2012/09/13 / Azulean

Windows 7 API Code Pack を使ってサムネイルをとってみる

ちょっとした実験レベルでサムネイルを取り出すコードを書いてみた。Windows 7 API Code Pack を使うとかなりお手軽にできます。

最初に、Windows 7 API Code Pack を入手して参照する。NuGet なり、MSDN なりにて。
必須ではないので、自分で IShellFolder などの定義を用意できるのであれば、それでも代用可です。

KnownFolders クラスの static メンバーで Computer とか、Desktop とかがいるのでそこから列挙してみる。

foreach (ShellFolder item in KnownFolders.Computer) {

// とりあえず、ファイルシステムオブジェクトではなかったのでこの条件にした
// デバイス以外も列挙される恐れがあるかも?
if (!item.IsFileSystemObject)
{
     _devicesList.Add(item);
    listBoxDevices.Items.Add(item.Name);
}

}

この例では、ポータブルデバイスを列挙する方法が判然としていなかったので、ファイルシステムではないものだけをピックアップしている。


列挙したフォルダーをさらにたどるとか、ShellFileSystemFolder.FromFolderPath からお目当ての ShellFolder を得て、さらにそこから列挙するか、ShellFile.FromFilePath で一気にファイルをとるかしましょう。

ファイルに対応する ShellObject がとれればこっちのもの。以下のようなコードでサムネイルがとれる。

pictureBoxThumbnail.Image = shellFile.Thumbnail.Bitmap;

shellFile は対象の ShellObject だ。

iPhone を Windows 7 環境で USB 接続している状態で後述するサンプルを動かすとこんな感じでとれる。

image

実装したコードも 100 行ほどで済むので楽ちん。(ただ、Dispose とかきちんとしきれてないかも)

操作的には最初に左上のデバイスの列挙をクリックして右のリストボックスに表示されるフォルダーを選択して真ん中上のボタンを押してを繰り返して、JPEG が出てきたら選んで右のボタンを押すという形。

サンプル:http://sdrv.ms/PbBXIv

ここからファイル操作な話は未確認。Code Pack ベースではできないかもしれないなぁと思っていますが、さて…。

3件のコメント

コメントする
  1. うお / 3月 3 2014 17:44

    ShellObject(ShellFolder / ShellFile)が現物じゃなく、あくまでサムネイル処理されたもの(Win7のエクスプローラーにおける各サイズのアイコン)でしかないとすれば、ファイル操作はできそうにないですね…(=ム=;)

  2. うお / 3月 4 2014 16:12

    名前空間と CopyHere を使えばできました…(^^;

  3. HIRAOKA / 3月 11 2016 21:03

    shellFile.Thumbnail.Bitmapを返さないiphoneやスマホがあるみたいです
    copyhereで現物コピーしてサムネイル取り出してます

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。