Icons in einer Übersicht darstellen (ProgAndy?)
-
- [ gelöst ]
-
Tweaky -
8. August 2010 um 16:21 -
Geschlossen -
Erledigt
-
-
- Offizieller Beitrag
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
-
- Offizieller Beitrag
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 MeldungZitat!>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 ausZitat+>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
Spoiler anzeigen
[autoit];Supported dropfiles: cpl, dll, exe, ocx
[/autoit] [autoit][/autoit] [autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <WinAPI.au3>Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]Global $Default = @SystemDir & "\shell32.dll"
[/autoit] [autoit][/autoit] [autoit]
Global $hGui, $LV, $Extract, $LHT, $IHM
Global $aEN[1]$hGui = GUICreate("", 500, 400, -1, -1, -1, BitOR($WS_EX_TOPMOST, $WS_EX_ACCEPTFILES))
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
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
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc GuiEvent()
[/autoit] [autoit][/autoit] [autoit]
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 ;==>GuiEventFunc Update($sFile)
[/autoit] [autoit][/autoit] [autoit]
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 ;==>UpdateFunc _ResourceEnumNames($hModule, $iType)
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_ResourceEnumNamesFunc ___EnumResNameProc($hModule, $pType, $pName, $lParam)
[/autoit]
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