joydog 发表于 2008-12-15 14:57:01

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

同上!!!!

谢高手赐教

最好 将 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 <> -1 And StringRight($sIn, 4) <> ".icl" Then
                        $Extract = 1
                        $LHT = ($LVHT + 1)
                  EndIf
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY


论坛里找来的例子,想打包成DLL...我不会,期待高手。

joydog 发表于 2008-12-15 16:13:51

严重感谢!!!!!!!

就是还缺少个 ExtractIconToFile.au3

不过重要部分已经搞定了。。谢谢

范统.贾 发表于 2008-12-15 16:25:27

晕,忘了,呵呵。补上。

ch1029 发表于 2009-4-26 17:37:17

看不懂。。。。。

烤地瓜 发表于 2009-5-9 18:18:45

:face (22):学习学习!

supersuper 发表于 2009-5-13 11:15:16

谢谢楼主了啊,支持一下了

yykj 发表于 2009-5-18 23:06:03

ico2dll怎么弄咧

menfan 发表于 2009-5-21 20:57:19

不错,收下。。

gongxinhai 发表于 2009-8-31 15:29:41

我也来学习一下!

m511324 发表于 2009-8-31 17:49:13

完全看不懂 顶一下

ccxw1983 发表于 2009-9-18 20:09:36

不错,不知如何设置exe文件的图标哦

haodd 发表于 2011-3-1 23:09:46

嚴重感謝 因為我也有同問

kaibing 发表于 2011-5-17 12:52:36

呵呵,我也正需要!

jsgh1983 发表于 2012-1-28 22:54:48

这个太有用了!论坛高手真多呀!
页: [1] 2
查看完整版本: au3怎么提取EXE中的图标资源??