找回密码
 加入
搜索
查看: 5606|回复: 17

au3怎么提取EXE中的图标资源??

  [复制链接]
发表于 2008-12-15 14:57:01 | 显示全部楼层 |阅读模式
同上!!!!

谢高手赐教

最好 将 ico 文件打包成DLL 的代码也能介绍一下。。。小弟感激不尽

[ 本帖最后由 joydog 于 2008-12-15 16:14 编辑 ]
发表于 2008-12-15 15:42:53 | 显示全部楼层
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <WinAPI.au3>
#include "ExtractIconToFile.au3"
 
Opt("GUIOnEventMode", 1)
 
Global $sIn = "E:\聊天工具\QQ2008\QQ.exe" ;<==这里可以换成你要提取的EXE或DLL文件,应该支持变量的,或从INI文件读取
Global $hGui, $LV, $Extract, $LHT, $IHM
 
$hGui = GUICreate("", 500, 400, -1, -1, -1, BitOR($WS_EX_TOPMOST, $WS_EX_ACCEPTFILES))
GUISetOnEvent($GUI_EVENT_DROPPED, "GuiEvent", $hGui)
GUISetOnEvent($GUI_EVENT_CLOSE, "GuiEvent", $hGui)
$LV = GUICtrlCreateListView("", 5, 5, 490, 390, $LVS_ICON)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
GUICtrlSetTip(-1, "Drop a supported file here to view it's icons." & @LF & "Double Click an icon to extract.")
_GUICtrlListView_SetView($LV, 1)
Update()
GUISetState(@SW_SHOW, $hGui)
 
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
 
While 1
    Sleep(100)
    ChkExtract()
WEnd
 
Func GuiEvent()
    Switch @GUI_CtrlId
        Case $GUI_EVENT_CLOSE
            Exit
        Case $GUI_EVENT_DROPPED
            If StringRegExp(@GUI_DragFile, "(?i)\.(cpl|dll|exe|icl|ocx)", 0) Then
                _GUICtrlListView_DeleteAllItems($LV)
                $sIn = @GUI_DragFile
                Update()
            EndIf
    EndSwitch
EndFunc   ;==>GuiEvent
 
Func ChkExtract()
    If $Extract Then
        $Extract = 0
        Local $FOD = FileSaveDialog("Save extracted icon as..", "", "Icon file (*.ico)", 18, DefName(), $hGui)
        If Not @error And $FOD <> "" Then
            WinSetTitle($hGui, "", "Extracting...")
            _ExtractIconToFile($sIn, $LHT, $FOD)
            If @error Then
                WinSetTitle($hGui, "", "Error extracting icon - Error Code: " & @error)
            Else
                WinSetTitle($hGui, "", "Icons found in " & StringMid($sIn, StringInStr($sIn, "\", 0, -1) + 1) & ": " & $IHM)
            EndIf
        EndIf
    EndIf
EndFunc   ;==>ChkExtract
 
Func Update()
    $IHM = _WinAPI_ExtractIconEx($sIn, -1, 0, 0, 0)
    WinSetTitle($hGui, "", "Icons found in " & StringMid($sIn, StringInStr($sIn, "\", 0, -1) + 1) & ": " & $IHM)
    For $i = 1 To $IHM
        GUICtrlCreateListViewItem("-" & $i, $LV)
        GUICtrlSetImage(-1, $sIn, -$i, 1)
    Next
EndFunc   ;==>Update
 
Func DefName()
    Local $FN = StringFormat("%0" & StringLen($IHM) & "d", $LHT)
    Return $FN & "_" & StringTrimRight(StringMid($sIn, StringInStr($sIn, "\", 0, -1) + 1), 3) & "ico"
EndFunc   ;==>DefName
 
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndLV, $tInfo
    $hWndLV = GUICtrlGetHandle($LV)
 
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case $hWndLV
            Switch $iCode
                Case $NM_DBLCLK
                    Local $LVHT = _GUICtrlListView_HitTest($hWndLV)
                    If $LVHT[0] <> -1 And StringRight($sIn, 4) <> ".icl" Then
                        $Extract = 1
                        $LHT = ($LVHT[0] + 1)
                    EndIf
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY



论坛里找来的例子,想打包成DLL...我不会,期待高手。
 楼主| 发表于 2008-12-15 16:13:51 | 显示全部楼层
严重感谢!!!!!!!

就是还缺少个 ExtractIconToFile.au3

不过重要部分已经搞定了。。谢谢
发表于 2008-12-15 16:25:27 | 显示全部楼层
晕,忘了,呵呵。补上。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2009-4-26 17:37:17 | 显示全部楼层
看不懂。。。。。
发表于 2009-5-9 18:18:45 | 显示全部楼层
学习学习!
发表于 2009-5-13 11:15:16 | 显示全部楼层
谢谢楼主了啊,支持一下了
发表于 2009-5-18 23:06:03 | 显示全部楼层
ico2dll怎么弄咧
发表于 2009-5-21 20:57:19 | 显示全部楼层
不错,收下。。
发表于 2009-8-31 15:29:41 | 显示全部楼层
我也来学习一下!
发表于 2009-8-31 17:49:13 | 显示全部楼层
完全看不懂 顶一下
发表于 2009-9-18 20:09:36 | 显示全部楼层
不错,不知如何设置exe文件的图标哦
发表于 2011-3-1 23:09:46 | 显示全部楼层
嚴重感謝 因為我也有同問
发表于 2011-5-17 12:52:36 | 显示全部楼层
呵呵,我也正需要!
发表于 2012-1-28 22:54:48 | 显示全部楼层
这个太有用了!论坛高手真多呀!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-19 12:24 , Processed in 0.082895 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表