[Beispiel] Icons von System-DLLs in LV darstellen

  • Hallo Com,

    hier ein kleines Skript um sich DLLs in einer Listview darstellen zu lassen:

    Spoiler anzeigen
    [autoit]

    #cs ------------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.6.1
    Author: AutoBert: http://www.autoit.de/index.php?page…7402#post187402

    [/autoit] [autoit][/autoit] [autoit]

    Skriptbeispiel für den Umgang mit GUICtrlCreateListView, _GUICtrlListView_AddColumn, _GUICtrlListView_AddItem,
    _GUICtrlListView_AddSubItem, _GUICtrlListView_SetImageList, _GUIImageList_AddIcon, _GUIImageList_GetImageCount
    #ce -------------------------------------------------------------------------------------------------------------------------
    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>
    #include <GuiImageList.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #cs
    compstui.dll|7 Licht aus|8 Licht ein|83 Telefon|95 Fax
    cryptui.dll|
    dot3ui.dll|1 Info
    filemgmt.dll|1 Hinweis
    msrating.dll.dll|10 OK(rund)11 abbrechen(rund)
    mmcndmgr.dll|9 abbrechen|14 Uhr|44 Lupe
    #ce
    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGui, $listview, $hListview, $hImage, $b, $iCount,$iWidth = @DesktopWidth, $iHeight = @DesktopHeight -80
    Global $Combo, $Progress, $Label,$aFile, $sDLLName, $Msg, $sTitel = "Icon-Übersicht "
    Local $exStyles = BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES)
    $hGui = GUICreate($sTitel & $sDLLName, $iWidth, $iHeight, 0, 0)
    $Combo = GUICtrlCreateCombo("", 2, 2, 120)
    $Progress = GUICtrlCreateProgress(125, 2, $iWidth -137,25)
    ;$Label = GUICtrlCreateLabel("TEST",330,2,200)
    $aFile = _FileListToArray(@SystemDir, "*.DLL")

    [/autoit] [autoit][/autoit] [autoit]

    $listview = GUICtrlCreateListView("", 2, 42, $iWidth-4, $iHeight - 44, BitOR($LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER, $LVS_REPORT))
    $hListview = ControlGetHandle($hGui, "", $listview)
    _GUICtrlListView_SetExtendedListViewStyle($listview, $exStyles)
    For $i = 1 To 8
    ; Fügt die Spalten hinzu
    _GUICtrlListView_AddColumn($listview, "Spalte " & $i, 120)
    Next
    GUISetState()
    For $i = 1 To $aFile[0]
    If _LoadIcons($aFile[$i]) > 0 Then GUICtrlSetData($Combo, $aFile[$i])
    GUICtrlSetData($Progress, 100- ($i / $aFile[0] * 100))
    ;GUICtrlSetData($Label,$i & " / " & $aFile[0])
    Next
    GUICtrlSetData($Combo, "shell32.dll", "shell32.dll")
    _showIcons("shell32.dll")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Combo
    $sDLLName = GUICtrlRead($Combo)
    _showIcons($sDLLName)
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _showIcons($sDLLName)
    Local $iSpalten, $iZeilen, $iBilder
    _GUICtrlListView_DeleteAllItems($hListview)
    $iCount = _LoadIcons($sDLLName)
    WinSetTitle($hGui,"",$sTitel & $sDLLName)
    ;ConsoleWrite($sDLLName & " " & $iCount & @CRLF)
    _GUICtrlListView_SetImageList($listview, $hImage, 1)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $iBilder = -1
    For $iZeilen = 1 To Int(($iCount - 1) / 8) + 1
    $iBilder += 1
    ; Fügt die Items hinzu
    _GUICtrlListView_AddItem($listview, "Bild: " & $iBilder, $iBilder)
    For $iSpalten = 1 To 7
    $iBilder += 1
    ; fügt die SubItems hinzu
    _GUICtrlListView_AddSubItem($listview, $iZeilen - 1, "Bild: " & $iBilder, $iSpalten, $iBilder)
    Next
    Next
    EndFunc ;==>_showIcons

    [/autoit] [autoit][/autoit] [autoit]

    Func _LoadIcons($sDLLName)
    Local $iCount, $iBilder, $iError
    Static $iGesamt
    _GUIImageList_Destroy($hImage)

    [/autoit] [autoit][/autoit] [autoit]

    ; Lädt die Bilder
    $hImage = _GUIImageList_Create(32, 32, 5, 3, 128, 256)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\" & $sDLLName, 0,True)
    $iBilder = 1
    Do
    $iError = _GUIImageList_AddIcon($hImage, @SystemDir & "\" & $sDLLName, $iBilder,True)
    $iBilder += 1
    Until $iError <= 0
    $iCount = _GUIImageList_GetImageCount($hImage)
    $iGesamt += $iCount
    if $iCount <> 0 Then ConsoleWrite($sDLLName & " " & $iCount & " " & $iGesamt & @CRLF)
    Return $iCount
    EndFunc ;==>_LoadIcons

    [/autoit]

    Es ist entstanden, weil ich weiss dass sich in den System-Dlls sehr viele (vielleicht auch für eigene Zwecke brauchbare?) Icons befinden. Ich suche nämlich Icons für die Datennavigation für DB-Programm. Ich habe noch nicht alle DLL's gesichtet und vielleicht deshalb auch noch nicht die gewsünschten Icons gefunden. Gesucht werden Icons die folgenden Symbolen bzw. Begriffen entsprechen "|< ", "<", ">", ">|", "+", "-", "bearbeiten", "neu", "speichern", "verwerfen". Vielleicht findert ihr ja welche für eure Zwecke, wenn ihr dabei zufällig auf die von mir gesuchten stosst bitte posten.

    Edit: und hier noch ein ScreenShot:

    autoit.de/wcf/attachment/11287/

    Viel Spass beim sichten der Icons wünscht autoBert

  • schau dir mal das set crystal project von everaldo.com oder so an, die musst du hald umwandeln

    Schönes Programm

  • MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)