如果我已经获得了目标文件的图标句柄,然后怎样才能将自己的程序的图标改变成和目标文件相同呢?
 ret=ExtractIconEx(目标文件路径,   IconIndex,   hlargeicon,   hsmallicon,   1)

解决方案 »

  1.   

    不要误导人家 
    程序运行时  指定ME.ICON=就行了 修改静态文件图标比动态的要难的多  还得分析PE 格式 
    想着就恐怖....下面给你个获取文件图标句柄的模块
    Option Explicit
    '获取文件图标
    Private Type TypeIcon
        cbSize As Long
        picType As PictureTypeConstants
        hIcon As Long
    End Type
    Private Type CLSID
        id(16) As Byte
    End Type
    Private Const MAX_PATH = 260
    Private Type SHFILEINFO
        hIcon As Long
        iIcon As Long
        dwAttributes As Long
        szDisplayName As String * MAX_PATH
        szTypeName As String * 80
    End Type
    Private Declare Function OleCreatePictureIndirect Lib "oleaut32.dll" (pDicDesc As TypeIcon, riid As CLSID, ByVal fown As Long, lpUnk As Object) As Long
    Private Declare Function SHGetFileInfo Lib "shell32.dll" Alias "SHGetFileInfoA" (ByVal pszPath As String, ByVal dwFileAttributes As Long, psfi As SHFILEINFO, ByVal cbFileInfo As Long, ByVal uFlags As Long) As Long
    Private Const SHGFI_ICON = &H100
    Private Const SHGFI_LARGEICON = &H0
    Private Const SHGFI_SMALLICON = &H1Private Function IconToPicture(hIcon As Long) As IPictureDisp     'ICON 转 PictureDim cls_id As CLSID
    Dim hRes As Long
    Dim new_icon As TypeIcon
    Dim lpUnk As IUnknown    With new_icon
            .cbSize = Len(new_icon)
            .picType = vbPicTypeIcon
            .hIcon = hIcon
        End With
        With cls_id
            .id(8) = &HC0
            .id(15) = &H46
        End With
        Dim CA As ColorConstants
        hRes = OleCreatePictureIndirect(new_icon, cls_id, 1, lpUnk)
        If hRes = 0 Then Set IconToPicture = lpUnk
        
    End Function
    Public Function GetIcon(Filename, Optional ByVal SmallIcon As Boolean = True) As IPictureDisp   '获得文件ICONDim Index As Integer
    Dim hIcon As Long
    Dim item_num As Long
    Dim icon_pic As IPictureDisp
    Dim sh_info As SHFILEINFO
        If SmallIcon = True Then
            SHGetFileInfo Filename, 0, sh_info, Len(sh_info), SHGFI_ICON + SHGFI_SMALLICON
        Else
            SHGetFileInfo Filename, 0, sh_info, Len(sh_info), SHGFI_ICON + SHGFI_LARGEICON
        End If
        hIcon = sh_info.hIcon
        Set icon_pic = IconToPicture(hIcon)
        Set GetIcon = icon_pic
        
    End Function