EXE・DLLからアイコンを取得する(V) <TOP>
ファイルシステムオブジェクトの情報からアイコンを取得します。
SHGetFileInfo ファイルシステムオブジェクトの情報を取得
DrawIcon アイコンを描画する関数
GetDC デバイスコンテキストの取得
ReleaseDC デバイスコンテキストの解放
'================================================================ '= EXE・DLLのアイコン取得 '= (SHGetFileInfo.bas)
'================================================================ #include "Windows.bi" #define MAX_PATH 260 ' ファイルオブジェクトに関する情報を定義する構造体 Type SHFILEINFOA hIcon As Long iIcon As Long dwAttributes As Long szDisplayName(MAX_PATH - 1) As byte szTypeName(80 - 1) As byte End Type #define SHGFI_DISPLAYNAME &H200 'ディスプレイ名 #define SHGFI_EXETYPE &H2000 'EXEタイプ #define SHGFI_ICON &H100 'アイコン #define SHGFI_LARGEICON &H0 '大きいアイコン #define SHGFI_SHELLICONSIZE &H4 'シェルサイズアイコン #define SHGFI_SMALLICON &H1 '小さいアイコン #define SHGFI_SYSICONINDEX &H4000 'システムアイコンインデックス #define SHGFI_TypeNAME &H400 'タイプ名 ' ファイルシステムオブジェクトの情報を取得する関数の宣言 Declare Function Api_SHGetFileInfo& Lib "Shell32" Alias "SHGetFileInfoA" (ByVal pszPath$, ByVal dwFileAttributes&, psfi As SHFILEINFOA, ByVal cbFileInfo&, ByVal uFlags&) ' アイコンを描画する関数の宣言 Declare Function Api_DrawIcon& Lib "user32" Alias "DrawIcon" (ByVal hDC&, ByVal x&, ByVal y&, ByVal hIcon&) ' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得 Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&) ' デバイスコンテキストを解放 Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&) Var Shared Picture1 As Object Var Shared Edit1 As Object Var Shared Text2 As Object Var Shared Button1 As Object Picture1.Attach GetDlgItem("Picture1") Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14 Text2.Attach GetDlgItem("Text2") : Text2.SetFontSize 14 Button1.Attach GetDLgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var phDC As Long Var TargetFileName As String Var TargetInfo As Long Var ShellFileInfo As SHFILEINFOA Var Ret As Long Picture1.cls phDC = Api_GetDC(Picture1.GethWnd) 'Picture1のDC取得 TargetFileName = GetDlgItemText("Edit1") '対象のファイル名を指定 Edit1.SetWindowText TargetFileName 'EditBoxにパス表示 TargetInfo = SHGFI_ICON Or SHGFI_LARGEICON '大きいアイコンの取得を指定 'ファイルに関する情報を取得 Ret = Api_SHGetFileInfo(TargetFileName, 0, ShellFileInfo, Len(ShellFileInfo), TargetInfo) Ret = Api_DrawIcon(phDC, 0, 0, ShellFileInfo.hIcon) '大きいアイコンを描画 If Ret <> 0 Then Text2.SetWindowText "成功!" Else Text2.SetWindowText "失敗!" End If Ret = Api_ReleaseDC(Picture1.GethWnd, phDC) 'デバイスコンテキスト解放 End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End