ホーム
| アプリケーション | Tips | ダウンロード | プログラム
| コラム

CBアプリ工房


Tips

exe 以外のファイルからアイコン抽出(SHGetFileInfo) 

更新 : 2010/06/17

 



解説:
これまでも、実行ファイルのアイコン抽出(ExtractIcon 関数)や、システムアイコンを抽出(LoadIcon 関数)する方法を見てきました。

今回は、Win32API の SHGetFileInfo 関数を使って、実行ファイル以外のファイルからアイコンを抽出してみます。

この関数は、以下のように定義されています。

DWORD_PTR SHGetFileInfo(
    LPCTSTR pszPath,          // ファイルのフルパスを指定
    DWORD dwFileAttributes, // 通常は 0
    SHFILEINFO *psfi,           // SHFILEINFO 構造体
    UINT cbFileInfo,              // SHFILEINFO 構造体のサイズ
    UINT uFlags                   // 取得する情報のフラグ
);

この関数を利用するには、shellapi.h をインクルードする必要があります。

使用例:
アプリケーション起動後、Button1 をクリックしてファイルを指定すると、ファイルから抽出されたアイコンが Image1 に表示されます。
アイコンは、実行ファイル以外のファイルからも抽出できます。

コンポーネントは Image, Button, OpenDialog をひとつずつ配置してください。

Button1 の OnClick イベントハンドラで OpenDialog1 を呼び出して、任意のファイルを選択します。
SHGetFileInfo 関数に必要な引数を渡し、アイコンのハンドルを取得します。
TIcon オブジェクトからイメージを Image1 にコピーすることで、ファイルから抽出されたアイコンが表示されます。

いろいろなファイルを選択して、アイコンを抽出してみてください。

#include <shellapi.h>
//-------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    if (!OpenDialog1->Execute())
        return;

    TIcon *icon = new TIcon;
    SHFILEINFO fileinfo;

    SHGetFileInfo(OpenDialog1->FileName.c_str(),  
                         0, 
                         &fileinfo, 
                         sizeof(fileinfo), 
                         SHGFI_ICON);

    icon->Handle = fileinfo.hIcon;
    Image1->Picture->Icon->Assign(icon);

    delete icon;
}
//-------------------------------------------------------------------



[ ホーム | ページトップ | ブック | リンク | サイトマップ ]
Copyright(c) 2003 Shibu All rights reserved.