Hi,
ich würde gerne Icons in einer Übersicht darstellen, so wie hier
Jedoch stimmt die Zahl nicht mit dem Icon überein. (siehe am Schluß die 16000 Zahlen)
So sollte es sein.
Jedoch siehts so aus.
autoit.de/wcf/attachment/10957/
Was muss ich ändern?
Hi,
ich würde gerne Icons in einer Übersicht darstellen, so wie hier
Jedoch stimmt die Zahl nicht mit dem Icon überein. (siehe am Schluß die 16000 Zahlen)
So sollte es sein.
Jedoch siehts so aus.
autoit.de/wcf/attachment/10957/
Was muss ich ändern?
Wenn du die Dll im ResHacker betrachtest siehst du, dass die Nummerierung nach der Kategorie "ICON GROUP" und nicht "ICON" erfolgt. Dann stimmen auch die gezeigten Nummern.
Der Unterschied wird wohl einmal die Nummerierung nach dem Index und einmal nach ID sein.
An die IDs kommt man aber gar nicht so leicht ran
Das Bsp. hier (http://www.autoitscript.com/forum/index.php?showtopic=95616&view=findpost&p=687555) gibt die Icon genau so aus, wie von dir erwartet.
Sieht für mich auf den ersten Blick so aus, wie der auf progandy verweisende Link. ==> War nur der erste Blick - ist doch anders.
Hi,
danke für eure wertvollen Tipps.
Durch den Link von BugFix habe ich es für Win XP 32bit hinbekommen.
Leider funktioniert es unter Win 7 64bit nicht.
Es kommt die Meldung
Zitat!>21:48:34 AutoIT3.exe ended.rc:-1073740940
in Scite.
Jemand noch eine Idee?
Ist das net das normale Ende eines Skripts in Scite?
Ich bin der Meinung.
Gib doch in deinem Script einfach mal eine msgbox aus dann siehst du es doch.
MfG
Der_Doc
Ein nicht ganz.
Ein "normales" Beenden sieht so aus
Zitat+>17:18:12 AutoIT3.exe ended.rc:0
Da wird wohl irgendwo ein int statt einem ptr in dem DLLcall sein. Auf x64 rächt sich das schnell, bei 32bit nicht
Da ich von den Dllcall Sachen null Ahnung habe, hoffe ich jemand findet den Fehler bzw. eine Lösung
Ich habe nochmal bei google geschaut, aber leider hab ich nix gefunden.
MfG
Der_Doc
Mit diesen Änderungen sollte der Link von BugFix funktionieren
;Supported dropfiles: cpl, dll, exe, ocx
[/autoit] [autoit][/autoit] [autoit]#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <WinAPI.au3>
Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]Global $Default = @SystemDir & "\shell32.dll"
Global $hGui, $LV, $Extract, $LHT, $IHM
Global $aEN[1]
$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.")
_GUICtrlListView_SetView($LV, 1)
Update($Default)
GUISetState(@SW_SHOW, $hGui)
While 1
Sleep(100)
WEnd
Func GuiEvent()
Switch @GUI_CtrlId
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_EVENT_DROPPED
If StringRegExp(@GUI_DragFile, "(?i)\.(cpl|dll|exe|ocx)", 0) Then
_GUICtrlListView_DeleteAllItems($LV)
$Default = @GUI_DragFile
Update($Default)
EndIf
EndSwitch
EndFunc ;==>GuiEvent
Func Update($sFile)
Local Const $RT_GROUP_ICON = 14
Local Const $LOAD_LIBRARY_AS_DATAFILE = 0x2
Local $hModule, $hIcon, $iState = 0, $iGN = "?"
Switch $sFile
Case "shell32.dll", "0"
$hModule = _WinAPI_GetModuleHandle($sFile)
Case Else
Switch StringRight($sFile, 3)
Case "exe","cpl", "dll", "ocx"
$hModule = _WinAPI_LoadLibraryEx($sFile, $LOAD_LIBRARY_AS_DATAFILE)
$State = 1
EndSwitch
EndSwitch
_ResourceEnumNames($hModule, $RT_GROUP_ICON)
If $State Then _WinAPI_FreeLibrary($hModule)
WinSetTitle($hGui, "", "Icons found in file: " & $aEN[0])
For $i = 1 To Ubound($aEN) -1
GUICtrlCreateListViewItem($aEN[$i], $LV)
GUICtrlSetImage(-1, $Default, -$i, 1)
Next
Dim $aEN[1]
EndFunc ;==>Update
Func _ResourceEnumNames($hModule, $iType)
Local $aRet, $xCB
If Not $hModule Then Return SetError(1, 0, 0)
$xCB = DllCallbackRegister('___EnumResNameProc', 'int', 'int_ptr;int_ptr;int_ptr;int_ptr')
$aRet = DllCall('kernel32.dll', 'int', 'EnumResourceNamesW', 'ptr', $hModule, 'int_ptr', $iType, 'ptr', DllCallbackGetPtr($xCB), 'ptr', 0)
DllCallbackFree($xCB)
If $aRet[0] <> 1 Then Return SetError(2, 0, 0)
Return SetError(0, 0, 1)
EndFunc ;==>_ResourceEnumNames
Func ___EnumResNameProc($hModule, $pType, $pName, $lParam)
If BitShift($pName, 16) = 0 Then
ReDim $aEN[UBound($aEN) + 1]
$aEN[0] += 1
$aEN[UBound($aEN) - 1] = $pName
Else
Local $aSize = DllCall('kernel32.dll', 'int', 'lstrlenW', 'ptr', $pName), $tBuf
If @error Then Local $aSize[1] = [0]
$tBuf = DllStructCreate('wchar[' & $aSize[0] & ']', $pName)
ReDim $aEN[UBound($aEN) + 1]
$aEN[0] += 1
$aEN[UBound($aEN) - 1] = DllStructGetData($tBuf, 1)
EndIf
Return 1
EndFunc ;==>___EnumResNameProc
Danke ProgAndy,
funktioniert nun einwandfrei unter 32bit und 64bit