EXE・DLLからアイコン取得(Y)         <TOP>


EXE・DLLからアイコンを取得します。

ExtractAssociatedIcon 関連付けられている実行可能ファイルに含まれるアイコンハンドルを取得

DrawIconEx アイコンを描画

DestroyIcon アイコンのハンドルを解放


例では、c:\fbasicv63\bin\fbasic.exeからアイコンを取得表示しています。色々な方法があるものですネ! 

 

'================================================================
'= EXE・DLLからアイコン取得(Y)
'=    (ExtractAssociatedIcon.bas)
'================================================================
#include "Windows.bi"

#define DI_COMPAT 4                     'システムイメージで描画する
#define DI_DEFAULTSIZE 8                'width パラメータとheightパラメータに0が指定されている場合、アイコンまたはマウスカーソルをデフォルト・
#define DI_IMAGE 2                      'イメージを使ってアイコン(またはマウスカーソル)を描画
#define DI_MASK 1                       'マスクを使ってアイコン(またはマウスカーソル)を描画
#define DI_NORMAL 3                     'DI_IMAGE と DI_MASK の組み合わ

' 関連付けられている実行可能ファイルに含まれるアイコンハンドルを取得
Declare Function Api_ExtractAssociatedIcon& Lib "shell32" Alias "ExtractAssociatedIconA" (ByVal hInst&, ByVal lpIconPath$, lpiIcon&)

' アイコンを描画
Declare Function Api_DrawIconEx& Lib "user32" Alias "DrawIconEx" (ByVal hDC&, ByVal xLeft&, ByVal yTop&, ByVal hIcon&, ByVal cxWidth&, ByVal cyWidth&, ByVal istepIfAniCur&, ByVal hbrFlickerFreeDraw&, ByVal diFlags&)

' アイコンのハンドルを解放
Declare Function Api_DestroyIcon& Lib "user32" Alias "DestroyIcon" (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 Button1 As Object

Picture1.Attach GetDlgItem("Picture1")
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    ShowWindow -1
    Cls
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var hpDC As Long
    Var hIcon As Long
    Var Ret As Long

    hpDC = Api_GetDC(Picture1.GethWnd)
    Picture1.cls
    hIcon = Api_ExtractAssociatedIcon(GethInst, "c:\fbasicv63\bin\fbasic.exe", 0)
    Ret = Api_DrawIconEx(hpDC, 0, 0, hIcon, 32, 32, 0, 0, DI_NORMAL)
    Ret = Api_DestroyIcon(hIcon)
    Ret = Api_ReleaseDC(Picture1.GethWnd, hpDC)  
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End