百度站长资源平台:从程序获取ICO图标

来源:百度文库 编辑:中财网 时间:2024/04/28 05:19:04

Option Explicit

'功能:
'   '获取文件(EXE、DLL)中包含的图标资源
'
'涉及到的API
'   ExtractIcon
'   DrawIcon
'
'来源:不详
'
'API声明
'Private Declare Function ExtractIconEx Lib "shell32.dll" Alias "ExtractIconExA" (ByVal lpszFile As String, ByVal nIconIndex As Long, phiconLarge As Long, phiconSmall As Long, ByVal nIcons As Long) As Long

'功能:获取指定文件的图标
'参数:
' hInst    应用程序句柄
' lpszExestrFile  EXE、DLL文件名
' nIconIndex   图标索引
'返回值:
' 当nIconIndex为-1时,返回文件包含的图标总个数
' 当nIconIndex为其他值时,返回文件的第nIconIndex个图标的句柄
Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExestrFile As String, ByVal nIconIndex As Long) As Long

'功能:在指定的绘图设备上绘制图标
'参数:
' hdc  绘图设备句柄
' x  水平坐标(像素)
' y  垂直坐标(像素)
' hIcon 要绘制的图标句柄
Private Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long


Private Sub Command1_Click()
    Dim i As Long
    Dim j As Long
    Dim k As Long
    Dim lngCount As Long        '图标总数
    Dim strFile As String       '文件名
   
    strFile = "D:\小工具\arswp2\arswp.exe"
    lngCount = ExtractIcon(App.hInstance, strFile, -1)
   
    If lngCount > 0 Then
        Do
            j = ExtractIcon(App.hInstance, strFile, i)
            k = DrawIcon(Picture1.hdc, 10 + 40 * i, 10, j)
            i = i + 1
            If i = lngCount Then
                Exit Sub
            End If
        Loop
    Else
        j = MsgBox(strFile & "文件中没有图标!")
    End If
   
End Sub