1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Slevin

Beiträge von Slevin

  • Directory TreeView mit Checkboxen, gibt's da vllt was fertiges?

    • Slevin
    • 1. Juni 2018 um 19:06

    Klasse, danke autoiter für den Link. Damit kann ich wirklich gut was anfangen :)

    Mal schauen, was Melba sonst noch schönes coded hat...

  • Directory TreeView mit Checkboxen, gibt's da vllt was fertiges?

    • Slevin
    • 1. Juni 2018 um 16:59

    Nachdem ich einen Beitrag von Scritch gelesen hatte und mir Robocopy wieder in Erinnerung kam, hab ich mir gedacht, meine Backup-Routinen neu zu überarbeiten. Bisher hab ich da alles mit VBS zusammengescriptet, aber ich muss gestehen, mir gefällt AutoIt mehr und mehr :)

    Das, was ich mir gerne vorstellen möchte, mag from the scratch ein wenig zuviel Arbeit für meine bescheidene Zeit sein, aber vielleicht gibt es ja bereits ne fertige UDF dafür:

    Es wäre perfekt, wenn man in einer TreeView Ansicht des Directorys die gewünschten Folder mittels Checkbox auswählen könnte, und wenn man in Subfoldern manche wieder deaktiviert, dann gibts halt die bekannte graue Checkbox ohne Haken drin.

    Für den Ansatz hab ich zumindest mal das hier gefunden:

    https://www.autoitscript.com/forum/topic/17…w-and-listview/

    https://www.autoitscript.com/forum/topic/12…-in-a-treeview/ (erstes Beispiel wählen, oder beim zweiten die UDF "Func _WinAPI_LockWindowUpdate($hWnd)" auskommentieren)

    Wenn jemand weitere scriplets, snippets oder was brauchbares kennt, würd ich mich sehr freuen.

    Cheers

  • FileCopy kopiert Dateien aus Unterordnern mit

    • Slevin
    • 31. Mai 2018 um 19:39

    Micrsosoft stellt, was Kopieren angeht, mit Robocopy ein wirklich klasses Werkzeug zur Verfügung. Wenn man also nicht nur mal schnell eine Datei von A nach B schieben möchte und ein halbwegs sicheres Kopieren gewährleisten will, dann würde ich persönlich zu diesem kleinen Helfer raten. Backups lassen sich damit wunderbar einrichten und Mirroring ist ohne lustige Zusatzsoftware möglich.

    http://www.wintotal.de/robocopy-der-kopier-gigant/

  • Verständnisfrage zu "Local vs Global" in Bezug auf Geschwindigkeit und Ressourcenbelegung

    • Slevin
    • 31. Mai 2018 um 16:37

    Ja leider, ich muss mich da einfach noch mehr in die Materie einlesen, von daher bin auch dankbar für jeden Hinweis und all die Hilfe, die ich hier erhalte.

    Ich bastel für gewöhnlich einfach so vor mich hin, meist Sachen in VBS. Aber memory-management hatte ich nie nötig zu beachten, da fehlts mir also einfach an Wissen.

    Aber du hast recht, ich werde das Script in Zukunft sicher auch für andere Zwecke umbauen, und dann wäre sowas nicht gerade smooth...

  • Verständnisfrage zu "Local vs Global" in Bezug auf Geschwindigkeit und Ressourcenbelegung

    • Slevin
    • 31. Mai 2018 um 15:07
    Zitat von Bitnugger

    PS: In deinem zweiten Script Teil 2, was passiert denn da mit den Bitmaps? Das ist nämlich auch wieder ein Speicherleck! 8o

    Stimmt, aber nur ein bedingtes, weil es nur maximal einmal mit allen Icons befüllt wird ;) (wenn ich das jetzt halbwegs korrekt verstanden habe)

  • Verständnisfrage zu "Local vs Global" in Bezug auf Geschwindigkeit und Ressourcenbelegung

    • Slevin
    • 31. Mai 2018 um 12:08

    Bitnugger, das ist wirklich gut, danke :)

    Drei Fragen hätte ich da noch zu deiner Version:

    1. Hat das separate Deklarieren und Schließen von Global $g_hDll = DllOpen("shell32.dll") einen Vorteil?

    2. Wieso hast du beim Setzen des Tray-Icons ein Error-Handling angefügt, würden eventuelle Fehlermöglichkeiten nicht schon vorab ausgeschlossen werden?

    3. Kann man einem Errorhandling auch eine UDF zuweisen, in etwa so: If @error Then _exitFunction() ConsoleWrite("@@ Debug line" & ...

  • Verständnisfrage zu "Local vs Global" in Bezug auf Geschwindigkeit und Ressourcenbelegung

    • Slevin
    • 31. Mai 2018 um 09:14
    Zitat von Oscar

    Du machst einen gravierenden Fehler!

    Mit _GDIPlus_BitmapCreateFromMemory erstellst Du bei jedem Aufruf eine neue Bitmap. Diese werden aber beim verlassen der Funktion nicht wieder freigegeben. Das führt zu einem Speicherleck.

    Besser einmal (global) die Icons erstellen und dann diese nutzen und bei Programmende wieder freigeben.

    Das behebt nicht nur das Speicherleck, sondern ist auch schneller.

    Also entweder wie autoiter meinte, die _setTrayIcon() UDF so gestalten:

    AutoIt
    Func _setTrayIcon($icon)
        $hBmp = _GDIPlus_BitmapCreateFromMemory(_WinAPI_Base64Decode(_fetchIcon($icon)))    ;load ico and convert it to a GDI+ bitmap
        $hIcon = _GDIPlus_HICONCreateFromBitmap($hBmp)                    ;convert bitmap to HIcon
        _WinAPI_TraySetHIcon($hIcon)
        _GDIPlus_BitmapDispose($hBmp)
        _WinAPI_DestroyIcon($hIcon)
    EndFunc

    Oder aber jedes Icon global fertig deklarieren, das würde dann jeweils in etwa so aussehen:

    AutoIt
    Local $iconBaselock = 'AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjI7EAIiKwACIirwAhIa4AICCtAB8frAAeHqoAHR2pABwcpwAbG6UAGRmkABgYogAXF6AAFhaeABQUnAATE5oAEhKZABAQlwAPD5UA8fHxAA0NkwAMDJEACwuPAAoKjQAICIwABweKAAYGiAAFBYcABASFAAMDhAACAoMAAQGCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADxAREhQVFhcYGRobHB0eHw4PEBESFBUWFxgZGhscHR4NDg8QERIUFRYXGBkaGxwdDA0ODxAREhQVFhcYGRobHAsMDQ4PEBETExUWFxgZGhsKCwwNDg8QExMUFRYXGBkaCQoLDA0ODxMTEhQVFhcYGQgJCgsMDQ4TExESFBUWFxgHCAkKCwwNExMQERIUFRYXBgcICQoLDBMTDxAREhQVFgUGBwgJCgsTEw4PEBESFBUEBQYHCAkKExMNDg8QERIUAwQFBgcICQoLDA0ODxAREgIDBAUGBwgJCgsMDQ4PEBEBAgMEBQYHCAkKCwwNDg8QAAECAwQFBgcICQoLDA0ODwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA='
    
    Global $iconBase = ObjCreate("Scripting.Dictionary")
    $iconBase("lock") = GDIPlus_HICONCreateFromBitmap(_GDIPlus_BitmapCreateFromMemory(_WinAPI_Base64Decode($iconBaselock)))
    
    Func _setTrayIcon($icon)
        _WinAPI_TraySetHIcon($icon)
    EndFunc
    
    _setTrayIcon("lock")

    Wenn ich das jetzt richtig verstanden habe, dann wird bei der ersten Variante jedes Mal das Icon aufs neue kreiert, aber der für das Erstellen des Icons benötigte Bitmap-Speicher wieder freigegeben.

    Bei der zweiten Variante werden alle Icons fertig kreiert und bleiben im Speicher, sind daher schneller ansprechbar, und es gibt auch kein Speicherleck - was insgesamt wahrscheinlich die intelligentere Variante ist, sofern sich das ganze in Grenzen hält (wie gesagt, so um die 20 Icons im aktuellen Fall)

    Das mit dem Speicherleck wäre natürlich gar nicht gut gewesen - DANKE für die Warnung

  • Verständnisfrage zu "Local vs Global" in Bezug auf Geschwindigkeit und Ressourcenbelegung

    • Slevin
    • 31. Mai 2018 um 06:45

    Aloha und nen schönen Feiertag,

    ich hab da mal ne allgemeine Frage. Wie ihr im beigefügten Script sehen könnt, belegen die embedded Icons, die als String in einem Dictionary abgelegt sind, ganz schön was an Platz.

    In meinem Beispiel würde bei jeder Tray-Icon-Änderung die _fetchIcon() UDF aufgerufen werden, in welcher sämtliche Icons Local deklariert sind - für das Beispiel hier nur 2 Icons, im eigentlichen Scipt sind das dann aber bis zu 20 oder mehr. Diese liefert dann den gewünschten String zurück, der im Anschluss dekodiert und als Icon gesetzt werden kann.

    Das bedeutet natürlich, dass jedes Mal alle Icons frisch in den Speicher geladen werden müssen, was natürlich auch Zeit in Anspruch nimmt.

    Daher meine Frage: sollte man die Icons lieber Global speichern und zu Beginn des Skripts einlesen? Würde das einen Geschwindigkeitsvorteil bringen? Vor allem, wenn die String-Variablen, wie in diesem Beispiel, eine ganz schöne Länge haben.

    AutoIt
    #include <GDIPlus.au3>
    #include <WindowsConstants.au3>
    
    _GDIPlus_Startup()
    Global $hBmp, $hIcon
    
    Global $hGUI = GUICreate("Display embedded ico file in tray", 320, 100)
    Global $idButton_1 = GUICtrlCreateButton("live", 90, 40, 60, 20)
    Global $idButton_2 = GUICtrlCreateButton("lock", 170, 40, 60, 20)
    
    GUISetState()
    
    While 1
        $idMsg = GUIGetMsg()
        Select
            Case $idMsg = -3
                ExitLoop
            Case $idMsg = $idButton_1
                _setTrayIcon("live")
            Case $idMsg = $idButton_2
                _SetTrayIcon("lock")
        EndSelect
    WEnd
    
    _GDIPlus_BitmapDispose($hBmp)
    _WinAPI_DestroyIcon($hIcon)
    _GDIPlus_Shutdown()
    Exit
    
    Func _setTrayIcon($icon)
        $hBmp = _GDIPlus_BitmapCreateFromMemory(_WinAPI_Base64Decode(_fetchIcon($icon)))    ;load ico and convert it to a GDI+ bitmap
        $hIcon = _GDIPlus_HICONCreateFromBitmap($hBmp)                    ;convert bitmap to HIcon
        _WinAPI_TraySetHIcon($hIcon)
    EndFunc
    
    Func _WinAPI_TraySetHIcon($hIcon) ;function by Mat
        Local Const $tagNOTIFYICONDATA = _
                        "dword Size;" & _
                        "hwnd Wnd;" & _
                        "uint ID;" & _
                        "uint Flags;" & _
                        "uint CallbackMessage;" & _
                        "ptr Icon;" & _
                        "wchar Tip[128];" & _
                        "dword State;" & _
                        "dword StateMask;" & _
                        "wchar Info[256];" & _
                        "uint Timeout;" & _
                        "wchar InfoTitle[64];" & _
                        "dword InfoFlags;" & _
                        "dword Data1;word Data2;word Data3;byte Data4[8];" & _
                        "ptr BalloonIcon"
        Local Const $TRAY_ICON_GUI = WinGetHandle(AutoItWinGetTitle()), $NIM_ADD = 0, $NIM_MODIFY = 1, $NIF_MESSAGE = 1, $NIF_ICON = 2, $AUT_WM_NOTIFYICON = $WM_USER + 1, $AUT_NOTIFY_ICON_ID = 1
        Local $tNOTIFY = DllStructCreate($tagNOTIFYICONDATA)
        DllStructSetData($tNOTIFY, "Size", DllStructGetSize($tNOTIFY))
        DllStructSetData($tNOTIFY, "Wnd", $TRAY_ICON_GUI)
        DllStructSetData($tNOTIFY, "ID", $AUT_NOTIFY_ICON_ID)
        DllStructSetData($tNOTIFY, "Icon", $hIcon)
        DllStructSetData($tNOTIFY, "Flags", BitOR($NIF_ICON, $NIF_MESSAGE))
        DllStructSetData($tNOTIFY, "CallbackMessage", $AUT_WM_NOTIFYICON)
        Local $aRet = DllCall("shell32.dll", "int", "Shell_NotifyIconW", "dword", $NIM_MODIFY, "ptr", DllStructGetPtr($tNOTIFY))
        If (@error) Then Return SetError(1, 0, 0)
        Return $aRet[0] <> 0
    EndFunc   ;==>_Tray_SetHIcon
    
    ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2015-01-20
    
    Func _fetchIcon($icon)
        Local $iconBase = ObjCreate("Scripting.Dictionary")
    
        $iconBase("live") = 'AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjI7EAIiKwACIirwAhIa4AICCtAB8frAAeHqoAHR2pABwcpwAbG6UAGRmkABgYogAXF6AAFhaeABQUnAATE5oAEhKZABAQlwAPD5UA8fHxAA0NkwAMDJEACwuPAAoKjQAICIwABweKAAYGiAAFBYcABASFAAMDhAACAoMAAQGCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADxAREhQVFhcYGRobHB0eHw4PEBESFBUWFxgZGhscHR4NDg8QERIUFRYXGBkaGxwdDA0ODxAREhQVFhcYGRobHAsMDQ4PEBETExUWFxgZGhsKCwwNDg8QExMUFRYXGBkaCQoLDA0ODxMTEhQVFhcYGQgJCgsTExMTExMTExUWFxgHCAkKExMTExMTExMUFRYXBgcICQoLDBMTDxAREhQVFgUGBwgJCgsTEw4PEBESFBUEBQYHCAkKExMNDg8QERIUAwQFBgcICQoLDA0ODxAREgIDBAUGBwgJCgsMDQ4PEBEBAgMEBQYHCAkKCwwNDg8QAAECAwQFBgcICQoLDA0ODwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA='
        $iconBase("lock") = 'AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjI7EAIiKwACIirwAhIa4AICCtAB8frAAeHqoAHR2pABwcpwAbG6UAGRmkABgYogAXF6AAFhaeABQUnAATE5oAEhKZABAQlwAPD5UA8fHxAA0NkwAMDJEACwuPAAoKjQAICIwABweKAAYGiAAFBYcABASFAAMDhAACAoMAAQGCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADxAREhQVFhcYGRobHB0eHw4PEBESFBUWFxgZGhscHR4NDg8QERIUFRYXGBkaGxwdDA0ODxAREhQVFhcYGRobHAsMDQ4PEBETExUWFxgZGhsKCwwNDg8QExMUFRYXGBkaCQoLDA0ODxMTEhQVFhcYGQgJCgsMDQ4TExESFBUWFxgHCAkKCwwNExMQERIUFRYXBgcICQoLDBMTDxAREhQVFgUGBwgJCgsTEw4PEBESFBUEBQYHCAkKExMNDg8QERIUAwQFBgcICQoLDA0ODxAREgIDBAUGBwgJCgsMDQ4PEBEBAgMEBQYHCAkKCwwNDg8QAAECAwQFBgcICQoLDA0ODwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA='
    
        Return $iconBase($icon)
    EndFunc
    
    Func _WinAPI_Base64Decode($sB64String)
        Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0)
        If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "")
        Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]")
        $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0)
        If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "")
        Return Binary(DllStructGetData($bBuffer, 1))
    EndFunc   ;==>_WinAPI_Base64Decode
    Alles anzeigen
  • Icons aus der resource-table ins dictionary laden - geht das?

    • Slevin
    • 31. Mai 2018 um 06:22

    So, dann abschließend nochmal vielen Dank für eure Hilfe.

    Ich habe mich nun für die Base64-embedded-String Variante entschieden, da man hier ohne Plattenzugriff auskommt und keine speziellen Lösungen für compiled vs non-compiled benötigt.

    So langsam wird's ja was... :)


  • Icons aus der resource-table ins dictionary laden - geht das?

    • Slevin
    • 29. Mai 2018 um 13:10

    Ok, dann hab ich jetzt ja die freie Auswahl :)

    Mal schaun, wie ich mich letztendlich entscheiden werde - man muss halt erst mal über die Möglichkeiten Bescheid wissen.

    Danke euch allen

  • Icons aus der resource-table ins dictionary laden - geht das?

    • Slevin
    • 29. Mai 2018 um 12:55
    Zitat von NO1 :-)

    Dann legst du bis zur Auslieferung die Icons in nen extra Ordner und danach kannst du es ja immer noch umändern. Aber mein Tipp: Verwende eine DLL. Da kannst du alle Icons reinspeichern und ganz leicht mit TraySetIcon aufrufen. Dann hast du nur eine Datei für alle Icons.

    Ob die Icons in einer separaten DLL oder in der kompilierten EXE selbst liegen ist doch egal, oder übersehe ich da was?

    Es geht mir um das Verständnis, ob es möglich ist, eine Variable zu deklarieren, mit der ich ein Icon aus einer Datei für TrySetIcon ansteuern kann. Ich weiß nicht, wie ich es besser ausdrücken soll. Das Icon befindet sich in der EXE, und die Variable soll die EXE und die Position an TraySetIcon übergeben.

    autoiter Der "File to Base64 String Code Generator v1.20 Build 2015-01-20" klingt nicht nur für diesen Zweck sehr interessant. Hast du das Skript ausprobiert? Bei mir gibt es Deklarationsfehler von Const-Variablen, mal schaun, woran das liegen könnte - vielleicht, weil manche includes von von 2015 andere Variablen haben.

  • Icons aus der resource-table ins dictionary laden - geht das?

    • Slevin
    • 29. Mai 2018 um 12:31

    Die Icons liegen in einem Unterordner und werden beim Compilieren ins Script miteingebunden. FileInstall will ich nicht vornehmen, das mache ich maximal nur für die Settings.ini.

    Das Script soll zuhasue unkompiliert laufen, da hab ich für mich auch kein Problem damit, dass die Icons in einem separaten Ordner liegen. Gleichzeitig aber soll das Skript als selbständiges Tool kompiliert ohne Installationsroutine (auch ohne FileInstall) weitergegeben werden können.

    Ich mag's selbst auch überhaupt nicht, wenn kleine Helferprogramme unzählige Dateien und Ordner brauchen - va, wenn das nicht zwingend sein muss. Klein und fein, so sollt es sein :)

    Und da dachte ich halt, vielleicht gibt es eine Möglichkeit, die Dictionary-Variable je nach Bedarf zu befüllen, entweder mit einer Adressierung zum physisch vorhandenen Icon im Unterordner oder aber zu einem Icon in der Resourcen-Tabelle. Und in weiterer Folge dann mit Hilfe dieser Dictionary-Variablen TraySetIcon anzuweisen seine Arbeit zu verrichten.

  • Icons aus der resource-table ins dictionary laden - geht das?

    • Slevin
    • 29. Mai 2018 um 11:54

    @autoiter, ja, das ist ein Ansatz der zumindest funktioniert.

    Allerdings hoffte ich auf eine Möglichkeit, die es sowohl erlaubt, das Skript unkompiliert als auch kompiliert laufen zu lassen.

    Über das Skript verteilt wird das TrayIcon unzählige male geändert. Es ist im Grunde das wichtigste Kommunikationsmittel. Deine Variante würde jetzt leider nur compiled funktionieren.

    Ich will mal zeigen, wie das in etwa aussieht:

    AutoIt
    If @Compiled Then
        For $i = 0 to 10
            $icon($i) = TraySetIcon(@ScriptFullPath, 201 + $i)
        Next
    
        $icon("live") = TraySetIcon(@ScriptFullPath, 212)
        $icon("lock") = TraySetIcon(@ScriptFullPath, 213)
        $icon("dot") = TraySetIcon(@ScriptFullPath, 214)
        $icon("blank") = TraySetIcon(@ScriptFullPath, 215)
        $icon("execute") = TraySetIcon(@ScriptFullPath, 216)
    
    Else
        Local $iconsDir = @ScriptDir & "\Icons\"
    
        For $i = 0 to 10
            $icon($i) = $iconsDir & "icon-" & $i & ".ico"
        Next
    
        $icon("live") = $iconsDir & "icon-live.ico"
        $icon("lock") = $iconsDir & "icon-lock.ico"
        $icon("dot") = $iconsDir & "icon-dot.ico"
        $icon("blank") = $iconsDir & "icon-blank.ico"
        $icon("execute") = $iconsDir & "icon-execute.ico"
    
        ; check for missing icons
        For $vKey In $icon
            If Not FileExists($icon($vKey)) Then
                _alert("Missing Icon Files." & @CRLF & "Please get proper installation.")
                Exit
            EndIf
        Next
    EndIf
    
    TraySetIcon($icon("live"))
    Alles anzeigen

    Natürlich funktioniert der Abschnitt @Compiled so nicht. Ich wüsste sonst noch eine Variante, bei der eine eigene Funktion das Setzen der Icons übernimmt. Dann wäre zumindest an allen Stellen im Skript, wo das Icon getauscht wird, ein einheitlich verständlicher Code vorhanden.

    Ich hoffte halt auf eine etwas elegantere Lösung :S

  • Icons aus der resource-table ins dictionary laden - geht das?

    • Slevin
    • 29. Mai 2018 um 08:56

    Ich würde gerne Icons, die sich im resource-table des kompilierten Scripts besfinden, in ein dictionary laden, um sie anschliessend mit Namen ansprechen zu können. Geht sowas überhaupt?

    Der nachfolgende Versuch haut jedenfalls schon mal nicht hin^^

    AutoIt
    #Region
        #AutoIt3Wrapper_Res_Icon_Add=Icons\icon-0.ico
        #AutoIt3Wrapper_Res_Icon_Add=Icons\icon-1.ico
        #AutoIt3Wrapper_Res_Icon_Add=Icons\icon-2.ico
        #AutoIt3Wrapper_Res_Icon_Add=Icons\icon-3.ico
        #AutoIt3Wrapper_Res_Icon_Add=Icons\icon-4.ico
        #AutoIt3Wrapper_Res_Icon_Add=Icons\icon-5.ico
        #AutoIt3Wrapper_Res_Icon_Add=Icons\icon-6.ico
        #AutoIt3Wrapper_Res_Icon_Add=Icons\icon-7.ico
        #AutoIt3Wrapper_Res_Icon_Add=Icons\icon-8.ico
        #AutoIt3Wrapper_Res_Icon_Add=Icons\icon-9.ico
        #AutoIt3Wrapper_Res_Icon_Add=Icons\icon-10.ico
        #AutoIt3Wrapper_Res_Icon_Add=Icons\icon-live.ico
        #AutoIt3Wrapper_Res_Icon_Add=Icons\icon-lock.ico
        #AutoIt3Wrapper_Res_Icon_Add=Icons\icon-dot.ico
        #AutoIt3Wrapper_Res_Icon_Add=Icons\icon-blank.ico
        #AutoIt3Wrapper_Res_Icon_Add=Icons\icon-execute.ico
    #EndRegion
    
    $icon = ObjCreate("Scripting.Dictionary")
    For $i = 0 to 10
        $icon($i) = TraySetIcon(@ScriptFullPath, 201 + $i)
    Next
    
    $icon("live") = TraySetIcon(@ScriptFullPath, 212)
    $icon("lock") = TraySetIcon(@ScriptFullPath, 213)
    $icon("dot") = TraySetIcon(@ScriptFullPath, 214)
    $icon("blank") = TraySetIcon(@ScriptFullPath, 215)
    $icon("execute") = TraySetIcon(@ScriptFullPath, 216)
    
    TraySetIcon($icon("live"))
    Alles anzeigen

    Vielen Dank

  • Verständnisfrage zu "INI-Datei Keys, die mit vera beginnen"

    • Slevin
    • 29. Mai 2018 um 08:42

    Vielen Dank @Musashi für die Hintergrundinformationen.

    Es scheint wohl daran gelegen zu haben, dass die INI-Datei irgendwie *zwitterhaft* war. Ich hatte die Pfadangaben aus DOpus (Explorer-Ersatz) kopiert. Als es dann Probleme gab, hatte ich die INI in UTF-8 konvertiert. Und ab da war dann nix mehr nachvollziehbar, bis auf dass es mit "vera" besonders lustig wurde. Da es allerdings, aus welchem Grund auch immer, nicht ständig Probleme gab, es also hie und da auch mal funktionierte, kam ich erstmal natürlich nicht auf die Idee, dass es an der Codierung liegen könnte.

    Alles klar, und danke für die Infos.

  • Verständnisfrage zu "INI-Datei Keys, die mit vera beginnen"

    • Slevin
    • 29. Mai 2018 um 04:02

    Irgendwie scheint da wohl auch noch die Zeichenkodierung der INI-Datei mitzuspielen. Hab die INI komplett neu in ANSI erstellt und jetzt gehts erst mal.

    Ich werd das weiter verfolgen, aber komisch, dass das nur Keys passiert, die mit "Vera" beginnen...

  • Verständnisfrage zu "INI-Datei Keys, die mit vera beginnen"

    • Slevin
    • 29. Mai 2018 um 03:33

    Ich bin da auf etwas zumindest für mich sehr skurriles gestoßen.

    Ich möchte in der INI-Datei unter anderem Pfade zu einem Programm deklarieren. Komischerweise bekomme ich return-Fehler, wenn die Keys in der INI-Datei mit "Vera" beginnen.

    Code
    ;; INI Datei
    
    [VeraCrypt]
    VeraCryptPath = C:\Programme (portable)\+ ..... System & Utilities\+ ..... Dateien & Ordner\VeraCrypt\VeraCrypt-x64.exe
    AutoIt
    $VeraCryptPath = IniRead($FileSettings, "VeraCrypt", "VeraCryptPath", "0")

    Ist "Vera" irgendwie geschützt? Ich mein, da muss man auch erst mal drauf kommen - hab ne gute Ewigkeit lang rumgespielt um einen Fehler zu finden, den es in meinem Verständniss so gar nicht gibt :party1:

  • Verständnisfrage zu "Res Add Files" > Extra Icons

    • Slevin
    • 27. Mai 2018 um 21:38

    Ok, danke für die Infos

  • Verständnisfrage zu "Res Add Files" > Extra Icons

    • Slevin
    • 26. Mai 2018 um 17:18

    Ist es möglich, die in die EXE inkludierten Ressourcen (icons) via ursprünglichem Dateinamen anzusprechen, oder geht das nur über deren Resource Table Position?

    Und wenn nur über die Position, dann würde mich interessieren, wieso Position 1 lt. Referenz den Wert 201 hat?

    Vielen Dank mal wieder

  • Map Deklaration throws error

    • Slevin
    • 26. Mai 2018 um 11:00

    Also Map als Variable gibt es demnach gar nicht? Dann sollte man das vllt auch aus der Referenz rausnehmen^^

    Bitnugger:

    Wie alpimes richtig erkannt hat, geht es ja darum die Icons mit einer logischen Bezeichnung zu adressieren und nicht mit einem Array rumzuspielen.

    Die fehlenden $ sind der Schlampigkeit geschuldet, hier auf die Schnelle den Sinn meines Anliegens darzustellen - sorry dafür

    alpines:

    Aktuell verwende ich Version 3.3.14.5

    Danke für die Alternativen, große Hilfe. Mal schauen, welche der beiden Varianten mir sympathischer rüberkommt :)

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™