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, 1 dim sfi, 88 dim iid, 4 dimtype ImageList, vartype("comobj"), 1 sdim DisplayName, 260 sdim 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, iid SHGetImageList SHIL_JUMBO, varptr(iid), varptr(ImageList) if stat != 0 { dialog "イメージリストの取得に失敗しました" stop } // アイコンハンドルの取得 IImageList_GetIcon ImageList, sfi.1, ILD_TRANSPARENT, hIcon // COMオブジェクトを破棄 delcom ImageList if hIcon == 0 { dialog "アイコンハンドルの取得に失敗しました" stop } // アイコンの描画 DrawIconEx hdc, 50, 50, hIcon, 256, 256, 0, 0, DI_NORMAL DestroyIcon hIcon // 再描画 redraw pos 330, 150 // アイコンの情報を表示 memcpy DisplayName, sfi, 260, 0, 12 memcpy TypeName, sfi, 80, 0, 272 mes DisplayName mes TypeName stop