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