SHGetImageList APIをHSPから使ってみるテストです。256×256のコンピュータアイコンを表示します。
SHGetImageList APIをHSPから使ってみるテストです。256×256のコンピュータアイコンを表示します。
// SHGetImageListのテスト by akk026#uselib "shell32.dll"#func SHGetFileInfo "SHGetFileInfoA" sptr, int, int, int, int#func SHGetFolderLocation "SHGetFolderLocation" int, int, int, int, int#func SHGetImageList "SHGetImageList" int, int, int#uselib "user32.dll"#func DrawIconEx "DrawIconEx" int, int, int, int, int, int, int, int, int#func DestroyIcon "DestroyIcon" int#uselib "ole32.dll"#func CoTaskMemFree "CoTaskMemFree" int#func IIDFromString "IIDFromString" wstr, var#define CLSID_ImageList "{7C476BA2-02B1-48f4-8048-B24619DDC058}"#define IID_IImageList "{46EB5926-582E-4017-9FDF-E8998DAA0950}"#define CSIDL_DRIVES 0x11#define SHGFI_PIDL 0x00000008#define SHGFI_ICON 0x00000100#define SHGFI_DISPLAYNAME 0x00000200#define SHGFI_TYPENAME 0x00000400#define SHGFI_SYSICONINDEX 0x00004000#define SHIL_JUMBO 4#define ILD_TRANSPARENT 0x00000001#define DI_NORMAL 0x00000003#usecom IImageList IID_IImageList CLSID_ImageList#comfunc IImageList_GetIcon 10 int, int, var// SHGetImageList関数が存在するか確認if varptr(SHGetImageList) == 0 {dialog "SHGetImageList APIが見つかりません"stop}dim pidl, 1dim sfi, 88dim iid, 4dimtype ImageList, vartype("comobj"), 1sdim DisplayName, 260sdim TypeName, 80// PIDLの取得SHGetFolderLocation 0, CSIDL_DRIVES, 0, 0, varptr(pidl)if stat != 0 {dialog "PIDLの取得に失敗しました"stop}// システムアイコンのインデックスを取得SHGetFileInfo pidl, 0, varptr(sfi), 352, SHGFI_PIDL | SHGFI_ICON | SHGFI_TYPENAME | SHGFI_DISPLAYNAME | SHGFI_SYSICONINDEX// IID_IImageList型のCOMオブジェクトを取得IIDFromString IID_IImageList, iidSHGetImageList SHIL_JUMBO, varptr(iid), varptr(ImageList)if stat != 0 {dialog "イメージリストの取得に失敗しました"stop}// アイコンハンドルの取得IImageList_GetIcon ImageList, sfi.1, ILD_TRANSPARENT, hIcon// COMオブジェクトを破棄delcom ImageListif hIcon == 0 {dialog "アイコンハンドルの取得に失敗しました"stop}// アイコンの描画DrawIconEx hdc, 50, 50, hIcon, 256, 256, 0, 0, DI_NORMALDestroyIcon hIcon// 再描画redrawpos 330, 150// アイコンの情報を表示memcpy DisplayName, sfi, 260, 0, 12memcpy TypeName, sfi, 80, 0, 272mes DisplayNamemes TypeNamestop