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. BLinz

Beiträge von BLinz

  • Bilder im webp Format in GUI anzeigen

    • BLinz
    • 28. April 2022 um 19:10

    So Nachtrag: Dank UEZ könnte ich nun normale .webp Bilder direkt anzeigen und solche mit Animationen vorher z.B. zu .gif umwandeln.
    ABER das Umwandeln dauert zu lange, bei 80 Frames gerne mal 5 bis 10 Sekunden.

    Ich wollte das ganze in mein FotoSort-Programm einbinden - und da ist man nur noch genervt wenn man jedes mal viele Sekunden warten muss bis das nächste Bild kommt.

    Und irgendwie habe ich auch noch kein anderes Programm / Bildbetrachter gefunden mit dem man vernünftig ein paar tausend Bilder sortieren kann.

  • WebP v0.3.1 build 2022-06-18 beta

    • BLinz
    • 22. April 2022 um 21:30

    mhh, UEZ danke für deine bisherige Arbeit.

    Und für die 3 Beispiele, gerade WebP Example3.au3 ist hilfreich weil ich so leicht an die Auflösung des Bildes für die Skalierung komme.

    Und ich kann vorher prüfen ob es animiert ist oder nicht.

    Da die Bilder ins GDI+ umgewandelt werden nehme ich an das es mit den Animationen schon eine kompliziertere Nummer wird?

    Ich habe gerade die Beispiel-Kommandozeilentool von google getestet und bin begeistert wie schnell z.B. die vwebp.exe ist, auch bei großen Animationen

  • Bilder im webp Format in GUI anzeigen

    • BLinz
    • 22. April 2022 um 21:20
    Zitat von oh-ha

    Hast du dir schon mal den Code angesehen, wenn du eine WebP Datei im Editor aufmachst?

    Normal steht da für Bilder

    RIFFâ( WEBPVP8

    RIFF®B WEBPVP8

    RIFF–+ WEBPVP8

    in der ersten oder in der ersten und zweiten Zeile

    Wenn du eine Animierte WebP anschaust hast du

    RIFF"ã WEBPVP8X

    RIFF̧ WEBPVP8X

    RIFFüž WEBPVP8X

    auch wiederum in der ersten oder ersten und zweiten Zeile

    Der Unterschied wäre dann nur das X am Ende für Animierte.

    Sehr selten kommt es wohl auch vor, dass man eine *.webp als Bilddatei hat, wo auch ein X dabeisteht, habe aber noch keine animierte *.webp Datei gefunden, wo das X fehlte.

    Vielleicht kannst du ja damit etwas anfangen.

    Alles anzeigen

    Gut gesehen.

    Ich habe es doch noch geschafft den VLC einzubinden ... leider ist in der aktuellen Version der WEBP Support defekt, müsste also eine ältere Version vor 3 nehmen.

    UEZ hat da nun auch angefangen was zu bauen, statische Bilder würden schon funktionieren: WebP Bilder in Autoit v0.2.0 build 2022-04-21 beta

  • Bilder im webp Format in GUI anzeigen

    • BLinz
    • 17. April 2022 um 16:50

    Ich hab gerade einen Anlauf genommen es über VLC einzubinden ... aber die "uralte" UDF von 2010 bekomme ich nicht mehr zum laufen. Da wird es auch über einen eingebettet IE bzw. über ein ActiceX Control gemacht. Aber das läuft wohl so in 2022 nicht mehr

  • Bilder im webp Format in GUI anzeigen

    • BLinz
    • 15. April 2022 um 21:48

    Ich habe Imagemagick installiert, damit kann ich das machen. Aber ich müsste eigentlich vorher wissen ob es nur ein statisches Bild oder aber ein animiertes Bild ist um z.B. JPG/PNG oder GIF als Ziel zu wählen.

    Coole wäre natürlich das Format zu erhalten, es ist wirklich kleiner / die Animationen haben mehr Farben

  • Bilder im webp Format in GUI anzeigen

    • BLinz
    • 15. April 2022 um 11:57

    Moin,

    gibt es eine Möglichkeit das webp Bildformat in einer AutoIt-GUI anzeigen zu lassen?

    Beispielbilder findet man unter https://developers.google.com/speed/webp/gallery1, z.B.

    https://www.gstatic.com/webp/gallery/1.webp

    Ich vermute es würde mit einem eingebetteten IE gehen, aber eventuell gibt es ja auch eine einfachere Methode.

    Dabei gibt es ja wie bei GIF auch die Möglichkeit animierte webp-Bilder zu erstellen, Beispiel: https://mathiasbynens.be/demo/animated-webp

    Ich habe schon ein wenig gesucht und gegoogelt, leider wird webp oft als webpage interpretiert. Ich habe schon ein wenig mit den Suchfiltern rumgespielt aber auch ohne Erfolg.

    Ich hoffe einer von euch was da mehr.

  • winhttp Request - Warten auf Antwort dauert sehr lange (20 Sekunden)

    • BLinz
    • 19. Januar 2022 um 15:03

    So, ich habe heute mal einen neuen Anlauf genommen und konnte mein Problem selbst lösen.

    Ich wollte gerade die Anwahl auf cURL umbauen - dabei fiel mir auf das in meinem Beispiel für cURL ich nur

    Code
    XML=<CiscoIPPhoneExecute><ExecuteItem URL=\"Dial:0123456789\"/></CiscoIPPhoneExecute>

    aufrufe während ich in meinem Skript

    AutoIt
    Local $sPD = 'XML=<CiscoIPPhoneExecute><ExecuteItem Priority="1" URL="Play:Beep"/><ExecuteItem Priority="' & $s_CiscoPrio & '" URL="Dial:' & $s_CiscoPrefix & GUICtrlRead($ComboNumber) & '"/></CiscoIPPhoneExecute>'

    also zusätzlich noch en Beep und die Priorität. Und letzteres sogar 2 mal/doppelt (was aber richtig ist weil es 2 verschiedene Befehle sind).

    Kaum habe ich das weggelassen geht es wieder "schnell"

  • winhttp Request - Warten auf Antwort dauert sehr lange (20 Sekunden)

    • BLinz
    • 8. Dezember 2021 um 15:17

    Ich habe mir für meine älteren Cisco SIP-Telefone ein eigenes Wählprogramm gebaut. Die Wahl wird ausgelöst indem man dem Telefon einen http-POST Request sendet.

    Hier der Quellcode meiner Funktion:

    AutoIt
    ; Wählt die Rufummer aus dem ComboBox Feld indem diese als XML-Aufruf an das Cisco-Telefon gesendet wird
    Func ButtonCallClick()
        GUICtrlSetData($LabelStatus, "Wähle " & GUICtrlRead($ComboNumber))
        ;Priority    Priority of the request (optional):   0 Execute immediately (default) ; 1 Execute when idle ; 2 Execute only if idle
        Local $sPD = 'XML=<CiscoIPPhoneExecute><ExecuteItem Priority="1" URL="Play:Beep"/><ExecuteItem Priority="' & $s_CiscoPrio & '" URL="Dial:' & $s_CiscoPrefix & GUICtrlRead($ComboNumber) & '"/></CiscoIPPhoneExecute>'
        Local $oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
        $oHTTP.Open("POST", "http://" & $s_CiscoIP & "/CGI/Execute", False)
        $oHTTP.SetCredentials($s_CiscoUser,$s_CiscoPassword,0)
        $oHTTP.SetRequestHeader("Content-Type", "application/xml")
        $oHTTP.Send($sPD) ; Das eigentliche Senden
        Local $oReceived = $oHTTP.ResponseText
        Local $oStatusCode = $oHTTP.Status
        If $oStatusCode = 200 Then
            GUICtrlSetData($LabelStatus, "Telefon wählt!")
        Else
            GUICtrlSetData($LabelStatus, "Fehler! Statuscode: " & $oStatusCode)
        EndIf
        $oHTTP = 0 ; Aufräumen!
    EndFunc
    Alles anzeigen


    Das hat bisher immer gut funktioniert, der Wahlvorgang wird sofort ausgelöst. Aber früher habe ich sofort wenn er anfängt zu wählen den Status 200 zurück bekommen.

    Nun dauert es bestimmt 20 Sekunden bis die Antwort kommt und das Programm ist solange eingefroren.

    Wenn ich die Wahl z.B. per Curl auslöse beträgt die Verzögerung nur 1 bis 2 Sekunden, so war das im AutoIt-Skript früher auch:

    Code
     curl --user name1:pw1 --data "XML=<CiscoIPPhoneExecute><ExecuteItem URL=\"Dial:0123456789\"/></CiscoIPPhoneExecute>" http://192.168.1.232/CGI/Execute
    
    <?xml version="1.0" encoding="utf-8"?>
    <CiscoIPPhoneResponse>
    <ResponseItem URL="Dial:0123456789" Data="Success" Status="0" />
    </CiscoIPPhoneResponse>

    Ich könnte mir vorstellen das es irgendwelchen Windows-Updates zu tun hat bzw. das sich in Windows was geändert hat.

    Gäbe es die Möglichkeit die URL aufzurufen ohne auf die Antwort zu warten? Oder eine andere Idee wie ich es wieder "schnell" bekomme?

  • Icons im Infobereich /Tray Icons dauerhaft sichtbar machen

    • BLinz
    • 6. Juni 2018 um 15:20

    Moin autoiter

    in der Tat verschwinden hier bei mir beim kopieren die #include

    Auch bei mir "spinnt" er inzwischen.

    So wie es aussieht funktioniert die Methode an sich noch (also das Ändern des Registry-Schlüssels),

    die Methode zum Explorer neu starten ist es was nicht mehr richtig funktioniert

  • Alexaeinbindung?!

    • BLinz
    • 29. Mai 2018 um 16:06

    Nachtrag: https://blog.loetzimmer.de/2017/10/amazon…shell-echo.html

    Dem Skript kann man schön die Urls entnehmen um recht viel mit den Echos direkt per HTTP aufrufen zu steuern, insbesondere Musik/Radio

    Nachteil ist das dies nicht funktioniert wenn man die 2 Faktor Authentifizierung nutzt.

  • Alexaeinbindung?!

    • BLinz
    • 29. Mai 2018 um 16:00

    Willst du per Amazon Echo / Alexa dein Programm starten lassen oder willst du die Echos ansteuern?

  • Prozess startet ohne GUI

    • BLinz
    • 12. April 2018 um 14:12

    Moin,

    Das Problem wird eher folgendes sein:

    Wenn das Programm als Dienst gestartet ist gibt es erst einmal keine Interaktion mit dem Desktop. Die GUI ist zwar da, nur sieht diese niemand. Hängt auch davon ab unter welchen Benutzer der Dienst gestartet ist - läuft der als Benutzer "SYSTEM" kann der angemeldete Benutzer "Manfred" natürlich dessen GUI nicht sehen.

    Der Dienst müsste das für den Benutzer Manfred starten - geht z.B. bei der Aufgabenplanung, da gibt es ein extra Häkchen ob diese mit dem Desktop interagieren kann.

    Allerdings müsste der Dienst dann auch die Anmeldedaten vom Benutzer "Manfred" wissen

    Bei vielen Programmen die als Dienst laufen aber auch dem Benutzer z.B. ein Symbol in der Taskleiste anzeigen wird sind es deshalb 2 verschiedene Programme - ein Dienst und ein Programm für die Taskleiste. Diese kommunizieren dann ggf. miteinander. Nebenbei wird es so auch einfacher Multiuser-fähig - Es können ja, auch auf einem normalen Windows Desktop, mehrere Personen gleichzeitig angemeldet sein (Benutzer wechseln).

    BLinz

  • Active Directory Funktionen - Neue Version 1.5.0.0 freigegeben!

    • BLinz
    • 1. März 2018 um 17:06
    Zitat von chrissi

    Ich hätte nochmal eine Frage: Ist es möglich, die User mittels LDAP_MATCHING_RULE_IN_CHAIN den nested Groups zuzuordnen, oder müsste man hier rekursiv die Gruppen durchlaufen um die Member der einzelnen Gruppen zu identifizieren?

    Also ich nutze diese Funktion um die direkten und indirekten Gruppen eines Benutzers zu ermitteln (falls das deine Frage ist):

    Code
    Func _GruppenErmitteln()
        _AD_Open()
        If @error Then Exit _MeldungAusgebenConsole("Konnte keinen Kontakt zum AD herstellen")
        ; Liste der direkten Gruppenmitgliedschaften
        $Gruppen_direkt[0] = 0
        Global $Gruppen_direkt_TEMP = _AD_GetUserGroups(@UserName)
        If @error > 0 Then
            _MeldungAusgebenConsole("Aktueller Benutzer ist scheinbar in keinerlei Gruppen! (direkt)")
        Else
            For $i = 1 To $Gruppen_direkt_TEMP[0]
                $Gruppen_direkt_TEMP[$i] = _AD_FQDNToSamAccountName($Gruppen_direkt_TEMP[$i])
            Next
            _ArraySort($Gruppen_direkt_TEMP, 0, 1)
            $Gruppen_direkt[0] = $Gruppen_direkt_TEMP[0]
            For $i = 1 To $Gruppen_direkt_TEMP[0]
                _ArrayAdd($Gruppen_direkt, $Gruppen_direkt_TEMP[$i])
            Next
        EndIf
        ; Liste der indirekten Gruppenmitgliedschaften
        $Gruppen_indirekt[0] = 0
        Global $Gruppen_indirekt_TEMP = _AD_RecursiveGetMemberOf(@UserName, 10, 1, 0)
        If @error > 0 Then
            _MeldungAusgebenConsole("Aktueller Benutzer ist scheinbar in keinerlei Gruppen! (indirekt)")
        Else
            _ArraySort($Gruppen_indirekt_TEMP, 0, 1)
            For $i = 1 To $Gruppen_indirekt_TEMP[0]
                If StringInStr($Gruppen_indirekt_TEMP[$i], "|") > 0 Then
                    If (StringLeft($Gruppen_indirekt_TEMP[$i], StringInStr($Gruppen_indirekt_TEMP[$i], "|") - 1)) <> (StringLeft($Gruppen_indirekt_TEMP[$i - 1], StringInStr($Gruppen_indirekt_TEMP[$i - 1], "|") - 1)) Then
                        $Gruppen_indirekt[0] = $Gruppen_indirekt[0] + 1
                        _ArrayAdd($Gruppen_indirekt, StringLeft($Gruppen_indirekt_TEMP[$i], StringInStr($Gruppen_indirekt_TEMP[$i], "|") - 1))
                    EndIf
                EndIf
            Next
            _ArraySort($Gruppen_indirekt, 0, 1)
        EndIf
        _AD_Close()
    EndFunc   ;==>_GruppenErmitteln
    Alles anzeigen
  • FotoSort2017

    • BLinz
    • 28. September 2017 um 20:42

    Ich habe oben nun auch die 3-geteilte Version angehängt die auch mit animierten GIF umgehen kann.

    Manchmal verhält sich das Programm nicht perfekt. Aber ich nutze es nun schon in der Form eine ganze Weile und lass es erst einmal so.

  • Info : Fehler beim Sicherheitszertifikat von AutoIt.de

    • BLinz
    • 28. September 2017 um 20:27

    Mhh, ich tippe meist einfach "autoit.de" im Chrome ein - und er verbessert es immer auf "www.autoit.de"

    Meine Webseite ist seit Jahren auch ohne "www."

    Allerdings habe ich mein Zertifikat trotzdem mit www. ausgestellt - und die Weiterleitung findet auf meinen Webserver statt (301 Moved Permanently)

    und dazu muss aber scheinbar das Zertifikat stimmen.

    Und noch mal: Ich verstehe das so das euer Zertifikat demnächst z.B. vom Chrome nicht mehr unterstützt wird. Allerdings solltet Ihr Anspruch auf ein Ersatz-Zertifikat von GeoTrust / RapidSSL haben.

    Ich verstehe aus den Pressemeldungen nicht ob die das überhaupt noch können oder wie lange die dann gültig sind.

  • Listview - Hintergrundfarbe einer Zeile setzen ohne den weißen Zwischenraum davor?

    • BLinz
    • 28. September 2017 um 12:34

    alpines Lösung mit der extra Spalte die man auf 0 setzt ist perfekt! Da ich die Header eh ausblende kann da auch keiner Unsinn treiben.

    Musashi Lösung behalte ich aber im Hinterkopf. Könnte ich bei mir ebenfalls einsetzen (da ohne Header)

    Danke!

  • Listview - Hintergrundfarbe einer Zeile setzen ohne den weißen Zwischenraum davor?

    • BLinz
    • 25. September 2017 um 20:07

    Ich will ein Listview einsetzen um Statusmeldungen anzuzeigen. Je nach Schweregrade werden die Zeilen unterschiedlich eingefärbt.

    Soweit kein Problem.

    Mir ist aufgefallen das aber nicht die gesamte Zeile eingefärbt wird sondern das davor immer ein Bereich von 5 Pixeln weiß bleibt.

    Kann man das verhindern / Kaschieren?

    Hier ein Beispiel:

    AutoIt: ListViewFarben.au3
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <WindowsConstants.au3>
    
    Example()
    
    Func Example()
        GUICreate("listview items", 220, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)
        GUISetBkColor(0x00E0FFFF) ; will change background color
    
        Local $idListview = GUICtrlCreateListView("col1  |col2|col3  ", 10, 10, 200, 150) ;,$LVS_SORTDESCENDING)
        Local $idButton = GUICtrlCreateButton("Value?", 75, 170, 70, 20)
        Local $idItem1 = GUICtrlCreateListViewItem("item2|col22|col23", $idListview)
        GUICtrlSetBkColor($idItem1, 0xE97659)
        Local $idItem2 = GUICtrlCreateListViewItem("item1|col12|col13", $idListview)
        GUICtrlSetBkColor($idItem2, 0x7499FF)
        Local $idItem3 = GUICtrlCreateListViewItem("item3|col32|col33", $idListview)
        GUICtrlCreateInput("", 20, 200, 150)
        GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; to allow drag and dropping
        GUISetState(@SW_SHOW)
    
        ; Loop until the user exits.
        While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
    
                Case $idButton
                    MsgBox($MB_SYSTEMMODAL, "listview item", GUICtrlRead(GUICtrlRead($idListview)), 2)
    
                Case $idListview
                    MsgBox($MB_SYSTEMMODAL, "listview", "clicked=" & GUICtrlGetState($idListview), 2)
    
            EndSwitch
        WEnd
    EndFunc   ;==>Example
    Alles anzeigen

    Die erste Zeile ist rötlich - doch davor bleiben 5 Pixel weiß.

    Gruß,

    BLinz

  • Binärdaten aus Registry manipulieren - PowerShell oder Visual Basic Skript umsetzen

    • BLinz
    • 21. September 2017 um 12:04

    So, aus dem ganzen ist nun auch etwas fertiges geworden: Icons im Infobereich /Tray Icons dauerhaft sichtbar machen

  • Info : Fehler beim Sicherheitszertifikat von AutoIt.de

    • BLinz
    • 20. September 2017 um 23:56

    Mhh, 4 Jahre gültig - ist aber kein SAN Zertifikat, also keine alternativen Hostnamen wie http://www.autoit.de

    Das Zertifikat fällt nach meinen Verständnis eh unter den Bann von Google: https://www.heise.de/security/meldu…en-3828578.html

    und sollte also eh erneuert werden.

    Ich persönlich habe gute Erfahrungen mit Let's Encrypt. Jede Menge namen im Zertifikat möglich - und ist einmal per Job die automatische Erneuerung einrichtet hat man auch keine sorgen mehr damit.

    Nutze ich für 20 Subdomains + Exchange + Raspberrys Pi

  • Icons im Infobereich /Tray Icons dauerhaft sichtbar machen

    • BLinz
    • 20. September 2017 um 23:00

    Bei den meisten Windows Benutzern befindet sich unten rechts auf dem Bildschirm die Uhr - und links davon der so genannte Infobereich.

    Wenn sich dort ein neues Programm festsetzt wird dieses zunächst für maximal 45 Sekunden angezeigt - und danach ausgeblendet.

    Es ist dann über den kleinen Pfeil nach oben erreichbar.

    Für ein Programm (Windows Host vom Desktop aus in Zabbix in den Wartungsmodus setzen und den Status mit Countdown anzeigen) wollte ich nun das direkt nach der Installation das Icon im Infobereich sichtbar ist.

    Gefunden hatte ich diese Lösung dafür: https://tmintner.wordpress.com/2011/07/08/win…ry-rabbit-hole/

    AspirinJunkie hat mir den Weg gezeigt wie ich die Binärdaten richtig auslese: Binärdaten aus Registry manipulieren - PowerShell oder Visual Basic Skript umsetzen

    UEZ hat mich mit dem vom File to Base64 String Generator erzeugten Code auf die Idee gebracht wie ich die Bytes manipulieren kann (nämlich DllStructCreate, DllStructSetData und DllStructGetData

    Und hier nun der Beispielcode mit dem man das AutoIt-Programm immer als Symbol angezeigt bekommt während ein Programm läuft.

    Wenn das Programm nur gefunden schreibt und nichts macht müsst Ihr mal ein anderes wählen oder das Symbol händisch ausblenden.

    Nicht erschrecken: Falls der Wert angepasst wird, wird auch die Explorer.exe neu gestartet, sonst ignoriert und überschreibt Windows den Wert wieder.

    Hier der Code:

    AutoIt: TrayNotifyIcon.au3
    #include <WinAPISys.au3>
    #include <WinAPI.au3>
    #include <Array.au3>
    
    ; Demoprogramm um Tray Icons dauerhaft sichtbar zu machen.
    ; Neue Icons im Info-Bereich werden spätestens nach 45 Sekunden ausgeblendet - mit diesem Kniff ist es immer sichtbar ohne das der benutzer dies einstellen muss
    ; Siehe https://tmintner.wordpress.com/2011/07/08/windows-7-notification-area-automation-falling-back-down-the-binary-registry-rabbit-hole/
    
    ; Am besten in SciTE ausführen, im Consolenfenster werden dann die Werte dargestellt
    
    Global $s_Program = "AutoIt3.exe" ; Das Icon für dieses programm immer sichtbar machen, ggf. mit Pfad (ganz oder in Teilen)
    Global $TrayVis_ShowOnlyNotification = 0 ; only show notifications
    Global $TrayVis_HideBoth              = 1 ; hide icon and notifications
    Global $TrayVis_ShowBoth              = 2 ; show icon and notifications
    
    Global $b_ExPath
    Global $b_IconStreamsRAW = RegRead("HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify", "IconStreams")
    Global $d_BlockSize = 1640
    Global $i_BytePos = 21 ; in den ersten 20 Bytes steht der Header - überspringen
    While $i_BytePos < BinaryLen($b_IconStreamsRAW)
        $b_ExPath = BinaryMid($b_IconStreamsRAW, $i_BytePos, 528)
    ;~     $s_ExePath = StringRegExpReplace(_Rot13(StringStripWS(BinaryToString($b_ExPath, 2), 8)), "((?<=exe).*)$", "")
        $s_ExePath = StringRegExpReplace(_Rot13(StringStripWS(BinaryToString($b_ExPath, 2), 8)), "(((?<=exe).*)$|\x0|\x1)", "")
        $b_NotificationVisibilitySetting = BinaryMid($b_IconStreamsRAW, $i_BytePos + 528, 4)
        ConsoleWrite($s_ExePath & " --> " & $b_NotificationVisibilitySetting & " ")
        Switch $b_NotificationVisibilitySetting
            Case "0x00000000"
                ConsoleWrite("(only show notifications)" & @CRLF)
            Case "0x01000000"
                ConsoleWrite("(hide icon and notifications)" & @CRLF)
            Case "0x02000000"
                ConsoleWrite("(show icon and notifications)" & @CRLF)
        EndSwitch
        ; Prüfen ob unser Wunschprogramm dabei ist:
        If StringInStr($s_ExePath, $s_Program) > 0 Then
            ConsoleWrite(@CRLF & "Gefunden: " & $s_Program & " ==> " & $s_ExePath & @CRLF & @CRLF)
            If Int(StringLeft($b_NotificationVisibilitySetting,4)) <> $TrayVis_ShowBoth Then
                ; Ist nicht Sichtbar!
    
                ; Für eine Leiste oben welche die einzelnen Blöcke markiert
                ;             1234567890123456789012345678901234567890
                ConsoleWrite("                                          ") ;Die ersten 20 Bytes überspringen + das 0x am Anfang
                For $i = 1 To (BinaryLen($b_IconStreamsRAW) - $d_BlockSize) Step $d_BlockSize
                    For $j = 1 To ($d_BlockSize - 1) Step 1
                        If $j = 528 Then
                            ConsoleWrite("##")
                        Elseif $j = 532 Then
                            ConsoleWrite("##")
                        Else
                            Consolewrite("..")
                        EndIf
                    Next
                    ConsoleWrite("||")
                Next
                ConsoleWrite(@CRLF)
                ; Nun einmal die Roh-Daten vor der Änderung
                ConsoleWrite($b_IconStreamsRAW & @CRLF)
    
                ; Wir müssen nun das einzelne Byte ändern
                Local Const $tagSTRUCT1 = "struct;byte var1[" & ($i_BytePos + 527) & "];byte var2[4];byte var3[" & (BinaryLen($b_IconStreamsRAW) - ($i_BytePos + 531)) & "];endstruct"
                Local $tSource = DllStructCreate($tagSTRUCT1)
                DllStructSetData($tSource, "var1", BinaryMid($b_IconStreamsRAW, 1, $i_BytePos + 528)) ; Anfang
                DllStructSetData($tSource, "var2", $TrayVis_ShowBoth) ; unser geändertes Byte
                DllStructSetData($tSource, "var3", BinaryMid($b_IconStreamsRAW, $i_BytePos + 532)) ; und den Rest wieder dranhängen
                Local $b_NewIconStreamsRAW = Binary(DllStructGetData($tSource, 1) & DllStructGetData($tSource, 2) & DllStructGetData($tSource, 3)) ; Wieder einen Wert daraus bauen
                ConsoleWrite($b_NewIconStreamsRAW & @CRLF) ; Unter den ausgelesenden Wert schreiben zum Vergleich
                For $i = 1 To ($i_BytePos + 528) Step 1 ; einen Anzeiger bauen an welcher Stelle wir suchen müssen
                    ConsoleWrite("==")
                Next
                ConsoleWrite("=|" & @CRLF)
                ConsoleWrite(Binary(DllStructGetData($tSource, 1)) & " -> var1" & @CRLF) ; die ersten 528 Bytes
                ConsoleWrite(Binary(DllStructGetData($tSource, 1) & DllStructGetData($tSource, 2)) & " -> var1 + var2" & @CRLF) ; die ersten 528 Bytes + die 4 Bytes für die Anzeige
    
                ; Problem: Wir haben hinter dem Rücken der Explorer.exe den Wert geändert.
                ; Jedesmal wenn diese beendet wird schreibt diese auch noch mal den Wert.
                ; Also müssen wir     1. Die Explorer.exe beenden
                ;                    2. Den neuen Registry-Wert schreiben
                ;                    3. Die Explorer.exe wieder starten
                ; Hier gefunden: https://www.autoitscript.com/forum/topic/189906-restart-explorerexe/?do=findComment&comment=1363358
                ;Save icon positions (probably not needed since we are doing a graceful exit ..)
                DllCall("shell32.dll", "none", "SHChangeNotify", "long", 0x8000000, "uint", BitOR(0x0, 0x1000), "ptr", 0, "ptr", 0)
                ;Close the explorer shell gracefully
                $h_SysTray_Handle = _WinAPI_FindWindow('Shell_TrayWnd', '') ; Zeiger holen
                _SendMessage($h_SysTray_Handle, 0x5B4, 0, 0) ; "Bitte beenden" senden
                While WinExists($h_SysTray_Handle) ; Warten bis beendet ist ...
                    Sleep(500)
                WEnd
                Sleep(500) ; Sicherheitshalber kurze Pause und dann den Schlüssel schreiben
                RegWrite("HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify", "IconStreams", "REG_BINARY", $b_NewIconStreamsRAW)
                Sleep(500)
                _start_explorer() ; Explorer.exe wieder starten ...
                While Not _WinAPI_GetShellWindow() ; Warten das diese gestartet ist ...
                    Sleep(500)
                WEnd
    ;~             EnvUpdate() ; Würde die Umgebungsvariablen aktualisieren
    ;~             ExitLoop; Wir hatten unseren Treffer, raus aus der Schleife
            Else
    ;~             ExitLoop
            EndIf
        EndIf
        $i_BytePos += $d_BlockSize
    WEnd
    
    Exit
    
    ; Funktionen ###########################################################################################################################
    Func _start_explorer()
        ; Startet die Explorer.exe, wartet nicht, stößt es nur an
        $strComputer = "localhost"
        $objWMI = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
        Local $objexplorer = $objWMI.Get("win32_process")
        $objexplorer.create("explorer.exe")
    EndFunc   ;==>_start_explorer
    
    Func _Rot13($s_Input)
        ; by AspirinJunkie
        Local $s_Ret = ""
        For $a_C In StringRegExp($s_Input, "(?>([N-Zn-z])|([A-Za-z])|(.))", 4)
            $s_Ret &= ChrW(AscW($a_C[0]) + (UBound($a_C) = 2 ? -13 : (UBound($a_C) = 3 ? 13 : 0)))
        Next
        Return $s_Ret
    EndFunc   ;==>_Rot13
    
    
    ; https://www.autoitscript.com/forum/topic/103871-_systray-udf/
    Alles anzeigen

    Verbesserungsvorschläge höre ich gern!

    BLinz

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™