EXE・DLLからアイコンを取得する(U) <TOP>
EXE・DLLファイルからアイコンを取り出します。
ExtractIconEx アイコンを取得
DrawIconEx アイコンを描画
GetDC デバイスコンテキストのハンドルを取得
ReleaseDC デバイスコンテキストを解放
アイコンを取得するファイルパスをエディットボックスにドラッグし『取得』ボタンをクリックします。
大きいアイコン、小さいアイコンを取得することができます。
'================================================================ '= EXE・DLLからアイコンを取り出す(U) '= (ExtractIconEx.bas) '================================================================ #include "Windows.bi" ' EXE・DLLのアイコンのハンドルを取得 Declare Function Api_ExtractIconEx& Lib "shell32" Alias "ExtractIconExA" (ByVal lpszFile$, ByVal nIconIndex&, phiconLarge&, phiconSmall&, ByVal nIcons&) ' アイコンを描画 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&) #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 の組み合わせ Var Shared Edit1 As Object Var Shared Text1 As Object Var Shared Text2 As Object Var Shared Picture1 As Object Var Shared Button1 As Object Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14 Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14 Text2.Attach GetDlgItem("Text2") : Text2.SetFontSize 14 Picture1.Attach GetDlgItem("Picture1") Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 Var Shared FileName As String '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var pDC As Long 'Picture1ハンドル Var lIcon As Long '32×32アイコン Var sIcon As Long '16×16アイコン Var Ret As Long Picture1.Cls pDC = Api_GetDC(Picture1.GethWnd) Ret = Api_ExtractIconEx(FileName, 0, lIcon, sIcon, 1) If Ret = 1 Then Text2.SetWindowText "EXE・DLLではありません" Exit Sub Else If Ret = 0 Then Text2.SetWindowText "アイコンが存在しません" Exit Sub Else Ret = Api_DrawIconEx(pDC, 0, 0, lIcon, 0, 0, ByVal 0, 0, DI_NORMAL) Ret = Api_DrawIconEx(pDC, 32, 0, sIcon, 0, 0, ByVal 0, 0, DI_NORMAL) End If If Ret <> 0 Then Text2.SetWindowText "成功!" Else Text2.SetWindowText "失敗!" End If Ret = Api_ReleaseDC(GetHwnd, pDC) Ret = Api_DestroyIcon(lIcon) Ret = Api_DestroyIcon(sIcon) End Sub '================================================================ '= シェルドロップされたファイル名を取得 '================================================================ Declare Sub Edit1_DropFiles edecl (ByVal DF As Long) Sub Edit1_DropFiles(ByVal DF As Long) Var CN As Long CN = GetDropFileCount(DF) FileName = GetDropFileName(DF, 0) Edit1.SetWindowtext FileName End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End