SHGetImageListのテスト

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_IImageListCOM
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
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX