1.13 SHGetFileInfo関数
[概要]
ファイルシステム上のオブジェクト(ファイル、フォルダ等)に関する各種情報を返します。
Delphiでの宣言及び各パラメータの解説を以下に示します。
function SHGetFileInfo(pszPath: PAnsiChar; dwFileAttributes: DWORD; var psfi: TSHFileInfo; cbFileInfo, uFlags: UINT): DWORD; stdcall;
|
{ パラメータ }
pszPath(in): | ファイルの相対・絶対パスを格納したバッファへのポインタ(uFlagsがSHGFI_PIDLを含む時はpszPathはシェルの名前空間内でファイルを識別するアイテムIDリストを指していなければならない) |
dwFileAttributes(in): | uFlagsがSHGFI_USEFILEATTRIBUTESを含む場合に使用されるファイル属性フラグ(以下のフラグの組合せ) |
|
・FILE_ATTRIBUTE_ARCHIVE---アーカイブファイル
(アプリケーションはこのフラグをバックアップファイルや削除ファイルに対して付与します)
・FILE_ATTRIBUTE_COMPRESSED---圧縮ファイル(圧縮フォルダ)
・FILE_ATTRIBUTE_DIRECTORY---ディレクトリ
・FILE_ATTRIBUTE_HIDDEN---隠しファイル
・FILE_ATTRIBUTE_NORMAL---属性無し(このフラグは単独で使用される)
・FILE_ATTRIBUTE_OFFLINE---ファイルのデータをすぐには利用できない
(ファイル、データがオフラインストレージに物理的に移動されたことを示す)
・FILE_ATTRIBUTE_READONLY---読込み専用
・FILE_ATTRIBUTE_SYSTEM---システムファイル
(OSの一部かあるいはOSにより排他的に使用されるファイル)
・FILE_ATTRIBUTE_TEMPORARY---テンポラリファイル
(メディアにフラッシュされない限りデータのほとんどがメモリ上に存在する)
|
psfi(out): | TSHFileInfo構造体 |
cbFileInfo(in): | TSHFileInfo構造体のサイズ |
uFlags(in): | 返されるファイル情報を指定するフラグ(以下のフラグの組合せ) |
|
・SHGFI_ATTRIBUTES.....ファイル属性フラグを返す
(属性フラグはpsfiにより指定されるTSHFileInfo構造体のdwAttributesにコピーされる)
・SHGFI_DISPLAYNAME.....ファイルの表示名を返す
(表示名はpsfiにより指定されるTSHFileInfo構造体のszDisplayNameにコピーされる)
・SHGFI_EXETYPE.....pszPathが実行ファイルの場合実行ファイルのタイプを返す
(このフラグは単独で用いられ返値は以下の通り)
0 ---> 非実行ファイルあるいはエラー
LOWORD = NE or PE
HIWORD = 3.0, 3.5, 4.0 ---> ウィンドウズアプリケーション
LOWORD = MZ
HIWORD = 0 ---> MS-DOS .EXE, .COM .BAT file
LOWORD = PE
HIWORD = 0 ---> Win32 コンソールアプリケーション
・SHGFI_ICON.....ファイルを表すアイコンのハンドル及びシステムイメージリスト内のアイコンインデックスを返す
(psfiにより指定されるTSHFileInfo構造体のhIcon、iIconにコピーされ、システムイメージリストのハンドルを返す)
・SHGFI_ICONLOCATION.....ファイルを表すアイコンを含むファイル名を返す
(ファイル名はpsfiにより指定されるTSHFileInfo構造体のszDisplayNameにコピーされる)
・SHGFI_LARGEICON.....大きなアイコンを返すSHGFI_ICON指定
・SHGFI_LINKOVERLAY.....ファイルアイコンにリンクを追加するSHGFI_ICON指定
・SHGFI_OPENICON.....「開いた」アイコンを返すSHGFI_ICON指定
・SHGFI_PIDL.....pszPathはパスではなくアイテムIDリストへのポインタを指す
・SHGFI_SELECTED.....アイコンにシステムハイライト色を混ぜるSHGFI_ICON指定
・SHGFI_SHELLICONSIZE.....シェルサイズのアイコンを返すSHGFI_ICON指定
・SHGFI_SMALLICON.....小さいアイコンを返すSHGFI_ICON指定
・SHGFI_SYSICONINDEX.....システムイメージリスト内のアイコンインデックスを返す
(インデックスはpsfiにより指定されるTSHFileInfo構造体のiIconにコピーされる)
・SHGFI_TYPENAME.....ファイルタイプを表す文字列を返す
(文字列はpsfiにより指定されるTSHFileInfo構造体のszTypeNameにコピーされる)
・SHGFI_USEFILEATTRIBUTES.....dwFileAttributesを使用する
|
{ 返値 }
返値はuFlagsに依存します。
uFlagsがSHGFI_EXETYPEの場合、返値は上述の実行ファイルタイプを表します。
また、uFlagsがSHGFI_ICONあるいはSHGFI_SYSICONINDEXを含む場合は、返値は大きなアイコンを含むシステムイメージリストのハンドルを表し、SHGFI_SMALLICONが指定されている場合は小さなアイコンを含むシステムイメージリストのハンドルを表します。
uFlagsがSHGFI_EXETYPE、SHGFI_ICON、SHGFI_SYSICONINDEX、SHGFI_SMALLICONを含まない場合は、関数が成功すると非ゼロ値が返され、失敗するとゼロが返されます。
[使用例]
ボタン(Button1)をクリックすると"C:\Program Files\BORLAND\DELPHI 3\BIN"ディレクトリ中の全てのファイル名とそのアイコンを ListView1に表示する例です。
procedure TForm1.AddIcon( FName: string);
var
FileInfo:TSHFileInfo;
LclIcon:TIcon;
LclListItem:TListItem;
begin
{どこかで ImageList1のサイズを大きいアイコン用にしておく
ImageList1.Width := 32;
ImageList1.Height := 32; }
ShGetFileInfo( PChar(FName), 0, FileInfo, SizeOf(FileInfo),
SHGFI_ICON or SHGFI_LARGEICON or SHGFI_DISPLAYNAME);
//追加するアイコン作成
LclIcon := TIcon.Create;
LclIcon.Handle := FileInfo.hIcon;
//ListView1にアイコン、表示名追加
LclListItem := ListView1.Items.Add;
LclListItem.Caption := FileInfo.szDisplayName;
LclListItem.ImageIndex := ImageList1.AddIcon( LclIcon);
//アイコンオブジェクト開放
LclIcon.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
SR: TSearchRec;
Dir: string;
begin
Dir := 'C:\Program Files\BORLAND\DELPHI 3\BIN\';
if FindFirst( Dir + '*.*', faAnyFile, SR) = 0 then
begin
AddIcon( Dir + SR.Name);
while FindNext( SR) = 0 do
AddIcon( Dir + SR.Name);
FindClose( SR);
end;
end;
|
ミニ解説: TSHFileInfo構造体
ファイルオブジェクトに関する情報を含む構造体です。
TSHFileInfoA = record
hIcon: HICON;
iIcon: Integer;
dwAttributes: DWORD;
szDisplayName: array [0..MAX_PATH-1] of AnsiChar;
szTypeName: array [0..79] of AnsiChar;
end;
TSHFileInfo = TSHFileInfoA;
|
[メンバー]
hIcon.....ファイル用のアイコンのハンドル
iIcon.....システムイメージリスト内のアイコンインデックス
dwAttributes.....ファイルオブジェクトの属性フラグ(ゼロあるいはファイルの共通属性を示す以下のフラグの組合せ)
(キャパビリティ関連)
・SFGAO_CANCOPY.....コピー可能
・SFGAO_CANDELETE.....削除可能
・SFGAO_CANLINK.....ショートカット作成可能
・SFGAO_CANMOVE.....移動可能
・SFGAO_CANRENAME.....リネーム可能
・SFGAO_DROPTARGET.....ドロップされたターゲット
・SFGAO_HASPROPSHEET.....プロパティシート有り
・SFGAO_CAPABILITYMASK......キャパビリティ用マスク(Andをとってキャパビリティに関するフラグのみを取出す)
(ディスプレイ関連)
・SFGAO_GHOSTED.....ゴーストアイコン(半透明アイコン)で表示
・SFGAO_LINK.....ショートカット
・SFGAO_READONLY.....読込み専用
・SFGAO_SHARE .....共有ファイル
・SFGAO_DISPLAYATTRMASK.....ディスプレイ用マスク(Andをとってディスプレイに関するフラグのみを取出す)
(コンテンツ関連)
・SFGAO_FILESYSTEM.....ファイルシステムの一部(ファイル、ディレクトリ、ルートディレクトリ)
・SFGAO_FILESYSANCESTOR.....ファイルシステムフォルダを含む
・SFGAO_FOLDER.....フォルダ
・SFGAO_HASSUBFOLDER.....サブフォルダを持つ
・SFGAO_CONTENTSMASK.....コンテンツ用マスク(Andをとってコンテンツに関するフラグのみを取出す)
(その他)
・SFGAO_REMOVABLE.....リムーバブルメディア上に存在
・SFGAO_VALIDATE.....キャッシュ情報を正当化する
・SFGAO_COMPRESSED.....圧縮されている
szDisplayName.....対象ファイルのウィンドウズシェル内での表示名あるいは対象ファイルを表しているアイコンを含むファイルへのフルパス
szTypeName.....ファイルタイプを表す文字列
|
|