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

Beiträge von Oscar

  • Checkbox aktivieren durch ListView

    • Oscar
    • 21. August 2021 um 16:14
    Zitat von Tweaky

    Gibt es einen Nachteil beim verwenden des Dummy-Control zu der anderen Methode

    Solange Du nicht wissen willst, welche Taste gedrückt wurde, gibt es keinen Nachteil.

  • Checkbox aktivieren durch ListView

    • Oscar
    • 17. August 2021 um 19:11

    Wenn Dir das mit dem Dummy-Control besser gefällt, dann erledige die Auswertung gleich in der Dummy-Funktion:

    AutoIt
    #Region    ;************ Includes ************
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    #EndRegion ;************ Includes ************
    
    
    Opt("GUIOnEventMode", 1)
    
    Global $hGui = GUICreate("Test", 300, 300)
    
    ;Liste mit Updates
    Global $idListview_schnell = GUICtrlCreateListView("Test", 50, 50, 150, 150, -1, $WS_EX_CLIENTEDGE)
    _GUICtrlListView_SetExtendedListViewStyle($idListview_schnell, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER))
    GUICtrlCreateListViewItem("Zeile 1", $idListview_schnell)
    GUICtrlCreateListViewItem("Zeile 2", $idListview_schnell)
    GUICtrlCreateListViewItem("Zeile 3", $idListview_schnell)
    
    Global $idCheckbox_test = GUICtrlCreateCheckbox("Test", 10, 10)
    GUICtrlSetState($idCheckbox_test, $GUI_DISABLE)
    
    Global $idDummy = GUICtrlCreateDummy()
    GUICtrlSetOnEvent($idDummy, "_dummy")
    
    GUIRegisterMsg($WM_NOTIFY, "WM_Notify")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_beenden")
    GUISetState()
    
    Func _dummy()
        Local $iCount = ControlListView($hGui, '', $idListview_schnell, 'GetSelectedCount')
        Local $iIndex = ControlListView($hGui, '', $idListview_schnell, 'GetSelected')
        ConsoleWrite(StringFormat('iCount: %i iIndex: %i\r\n', $iCount, $iIndex))
        If $iCount > 0 Then
            If BitAND(GUICtrlGetState($idCheckbox_test), $GUI_DISABLE) Then
                GUICtrlSetState($idCheckbox_test, $GUI_ENABLE)
                ConsoleWrite("aktivieren" & @CRLF)
            EndIf
        Else
            If BitAND(GUICtrlGetState($idCheckbox_test), $GUI_ENABLE) Then
                GUICtrlSetState($idCheckbox_test, $GUI_DISABLE)
                ConsoleWrite("deaktivieren" & @CRLF)
            EndIf
        EndIf
    EndFunc
    
    Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg, $wParam
        Local $tNMHDR, $iIDFrom, $iCode
        $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
        $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
        $iCode = DllStructGetData($tNMHDR, "Code")
        Switch $iIDFrom
            Case $idListview_schnell
                Switch $iCode
                    Case $LVN_KEYDOWN, $NM_CLICK
                        GUICtrlSendToDummy($idDummy)
                EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_NOTIFY
    
    Func _beenden()
        Exit
    EndFunc   ;==>_beenden
    
    
    While 1
        Sleep(10)
    WEnd
    Alles anzeigen
  • Checkbox aktivieren durch ListView

    • Oscar
    • 17. August 2021 um 07:36
    Zitat von Tweaky

    Aber wenn ich die Items mit den Pfeilstasten auswählen funktioniert es dann nicht mehr. Gibt es da auch eine Lösung?

    Du kannst $LVN_KEYDOWN mit auswerten, dann ist das zwar nicht der Index, aber es funktioniert trotzdem, weil "ungleich -1":

    AutoIt
    #Region    ;************ Includes ************
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    #EndRegion ;************ Includes ************
    
    Global $iListView_markiert_merken
    
    Opt("GUIOnEventMode", 1)
    
    GUICreate("Test", 300, 300)
    
    ;Liste mit Updates
    Global $idListview_schnell = GUICtrlCreateListView("Test", 50, 50, 150, 150, -1, $WS_EX_CLIENTEDGE)
    _GUICtrlListView_SetExtendedListViewStyle($idListview_schnell, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER))
    GUICtrlCreateListViewItem("Zeile 1", $idListview_schnell)
    GUICtrlCreateListViewItem("Zeile 2", $idListview_schnell)
    GUICtrlCreateListViewItem("Zeile 3", $idListview_schnell)
    
    Global $idCheckbox_test = GUICtrlCreateCheckbox("Test", 10, 10)
    GUICtrlSetState($idCheckbox_test, $GUI_DISABLE)
    GUIRegisterMsg($WM_NOTIFY, "WM_Notify")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_beenden")
    GUISetState()
    
    
    Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg, $wParam
        Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
        Local $hWndListView2
    
        $hWndListView2 = $idListview_schnell
        If Not IsHWnd($idListview_schnell) Then $hWndListView2 = GUICtrlGetHandle($idListview_schnell)
    
        $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
        $iCode = DllStructGetData($tNMHDR, "Code")
        Select
            Case $hWndFrom = $hWndListView2
                Switch $iCode
                    Case $LVN_KEYDOWN, $NM_CLICK
                        Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
                        Local $iIndex = DllStructGetData($tInfo, "Index") ; bei $LVN_KEYDOWN ist das nicht der Index
                        ConsoleWrite(StringFormat('%i iIndex: %i\r\n', @MSEC, $iIndex))
                        If $iIndex > -1 Then
                            If BitAND(GUICtrlGetState($idCheckbox_test), $GUI_DISABLE) Then
                                GUICtrlSetState($idCheckbox_test, $GUI_ENABLE)
                                ConsoleWrite("aktivieren" & @CRLF)
                            EndIf
                        Else
                            If BitAND(GUICtrlGetState($idCheckbox_test), $GUI_ENABLE) Then
                                GUICtrlSetState($idCheckbox_test, $GUI_DISABLE)
                                ConsoleWrite("deaktivieren" & @CRLF)
                            EndIf
                        EndIf
                EndSwitch
        EndSelect
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_NOTIFY
    
    Func _beenden()
        Exit
    EndFunc   ;==>_beenden
    
    
    While 1
        Sleep(10)
    WEnd
    Alles anzeigen
    Zitat von misterspeed

    sofern Oscar recht hat und das Event immer genau zweimal triggert

    Nein, es sind nicht immer genau zwei Trigger. Manchmal auch drei oder (beim deaktivieren) nur einer.

    Das Problem ist, dass bei einem "Select-change" von einem Listview-Item zum nächsten, immer erst ein deselect des alten Items ausgelöst wird und dann wird das neue Item selected.

    Das deselect passiert aber auch, wenn man in einen leeren Bereich klickt (also kein Item selektiert ist). Und in dem Fall soll ja die Checkbox deaktiviert sein.

    Deswegen ist $LVN_ITEMCHANGED nicht geeignet, um das abzufragen oder man muss das kurzzeitige deaktivieren der Checkbox in Kauf nehmen.

  • Checkbox aktivieren durch ListView

    • Oscar
    • 16. August 2021 um 08:47
    Zitat von Tweaky

    Wie kann ich dies verhindern?

    Das Problem tritt auf, weil Du auf ItemChanged prüfst. Dabei werden aber zwei Nachrichten an das Fenster gesendet.

    Lösen kann man das, indem man auf NM_CLICK prüft:

    AutoIt
    #Region    ;************ Includes ************
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    #EndRegion ;************ Includes ************
    
    Global $iListView_markiert_merken
    
    Opt("GUIOnEventMode", 1)
    
    GUICreate("Test", 300, 300)
    
    ;Liste mit Updates
    Global $idListview_schnell = GUICtrlCreateListView("Test", 50, 50, 150, 150, -1, $WS_EX_CLIENTEDGE)
    _GUICtrlListView_SetExtendedListViewStyle($idListview_schnell, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER))
    GUICtrlCreateListViewItem("Zeile 1", $idListview_schnell)
    GUICtrlCreateListViewItem("Zeile 2", $idListview_schnell)
    GUICtrlCreateListViewItem("Zeile 3", $idListview_schnell)
    
    Global $idCheckbox_test = GUICtrlCreateCheckbox("Test", 10, 10)
    GUICtrlSetState($idCheckbox_test, $GUI_DISABLE)
    
    GUIRegisterMsg($WM_NOTIFY, "WM_Notify")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_beenden")
    GUISetState()
    
    
    Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg, $wParam
        Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
        Local $hWndListView2
    
        $hWndListView2 = $idListview_schnell
        If Not IsHWnd($idListview_schnell) Then $hWndListView2 = GUICtrlGetHandle($idListview_schnell)
    
        $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
        $iCode = DllStructGetData($tNMHDR, "Code")
        Select
            Case $hWndFrom = $hWndListView2
                Select
                    Case $iCode = $NM_CLICK
                        Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
                        Local $iIndex = DllStructGetData($tInfo, "Index")
                        If $iIndex > -1 Then
                            If BitAND(GUICtrlGetState($idCheckbox_test), $GUI_DISABLE) Then
                                GUICtrlSetState($idCheckbox_test, $GUI_ENABLE)
                                ConsoleWrite("aktivieren" & @CRLF)
                            EndIf
                        Else
                            If BitAND(GUICtrlGetState($idCheckbox_test), $GUI_ENABLE) Then
                                GUICtrlSetState($idCheckbox_test, $GUI_DISABLE)
                                ConsoleWrite("deaktivieren" & @CRLF)
                            EndIf
                        EndIf
                EndSelect
        EndSelect
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_NOTIFY
    
    Func _beenden()
        Exit
    EndFunc   ;==>_beenden
    
    
    While 1
        Sleep(10)
    WEnd
    Alles anzeigen
  • Arduino ESP8266 - TCP Kommunikation

    • Oscar
    • 16. Juli 2021 um 15:14
    Zitat von TJF

    Hast Du eine Erfahrung wie das in Sachen Tempo und Stabilität mit einer TCP/UDP Lösung aussieht?

    Ich habe mir bisher nie die Mühe gemacht, das mit TCP/UDP auszuprobieren. Die Variante mit dem HTTP-Server ist sauschnell, wenn er denn erreichbar ist. ;)

  • Arduino ESP8266 - TCP Kommunikation

    • Oscar
    • 16. Juli 2021 um 15:10
    Zitat von TJF

    Ich habe mal nur den Autoit-Quelltext laufen lassen. Das dauert etwas bis das in der Konsole ausgegeben wird.

    Das AutoIt-Script funktioniert nur, wenn auch das Programm auf dem ESP läuft und sich der ESP im selben Netzwerk befindet.

    Und "?vol=42" ist lediglich ein Beispiel dafür, wie man einen Parameter an den ESP übergeben kann. "vol" ist der Parametername (siehe ESP-Programm) und der Wert hinter dem Gleichzeichen entspricht dann dem Wert, der übergeben wird.

  • Arduino ESP8266 - TCP Kommunikation

    • Oscar
    • 16. Juli 2021 um 14:34
    Zitat von TJF

    kann mir jemand sagen, wie ich vom Tablet (Autoit) aus auf einen ESP8266 (D1 mini Pro) über WiFi Daten austausche?

    Ich gehe jetzt mal von einer Kommunikation im lokalen Netzwerk aus.

    Am einfachsten ist es dann, einen Webserver auf dem ESP laufen zu lassen. So kommt man bei AutoIt mit InetRead aus und der Aufwand beim ESP hält sich auch in Grenzen.

    Hinweis: Falls Du keine FritzBox besitzt musst Du mal schauen, wie Dein Router den Hostnamen adressiert.

    Script in AutoIt:

    AutoIt
    Global $dData = InetRead("http://meinServer.fritz.box/?vol=42")
    Global $sData = BinaryToString($dData)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sData = ' & $sData & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

    Und das Programm auf dem ESP:

    C
    #include <ESP8266WiFi.h>
    #include <ESP8266WebServer.h>
    
    const char* ssid = "meineSSID"; // <- anpassen
    const char* password = "meinPasswort"; // <- anpassen
    const char* hostname = "meinServer"; // unter dieser Adresse ist der ESP im lokalen Netz erreichbar, z.B.: http://meinServer.fritz.box
    
    ESP8266WebServer server(80);
    
    char buf[256];
    
    void handleNotFound() {    // hier wird eine "Page not found"-Meldung generiert
      server.sendHeader("Connection", "close");
      server.send(404, "text/plain", "Page not found.");
    }
    
    void handleRoot() {
      if (server.args() > 0) { // wenn Parameter uebergeben wurden
        if (server.arg("vol") == "") {
          sprintf(buf, "Parameter not found.\r\n");
        } else {
          int vol = server.arg("vol").toInt();
          Serial.println(vol);
          sprintf(buf, "Volume changed.\r\n");
        }
      } else { // keine Parameter, dann nur eine "Server ready."-Meldung zurueckgeben
        sprintf(buf, "Server ready.\r\n");
      }
      server.sendHeader("Cache-Control", "no-cache"); // Anweisung an den Browser (kein Cache benutzen)
      server.sendHeader("Connection", "close");       // nach der Uebertragung die Verbindung schliessen
      server.send(200, "text/plain", buf);            // den Buffer senden
    }
    
    void setup() {
      Serial.begin(115200);
      pinMode(LED_BUILTIN, OUTPUT);
      digitalWrite(LED_BUILTIN, 0);
      Serial.println();
      Serial.println();
      Serial.print(F("Connecting to "));
      Serial.println(ssid);
      WiFi.mode(WIFI_STA);
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(F("."));
      }
      Serial.println();
      Serial.println(F("WiFi connected"));
      WiFi.hostname(hostname);
      server.on("/", handleRoot);
      server.onNotFound(handleNotFound);
      server.begin();
      Serial.println(F("Server started"));
      Serial.println(WiFi.localIP());
    }
    
    void loop() {
      server.handleClient(); // die Client-Behandlung aufrufen
    }
    Alles anzeigen

    Die ganzen "Serial"-Befehle kannst Du auch weglassen, die dienen nur dem debugging.

  • Möglichkeiten mit AutoIt

    • Oscar
    • 28. Juni 2021 um 07:03
    Zitat von Rathack

    Ist eigentlich nur für Einsteiger gedacht als kleine Hilfe wie man mit

    GUI's (Label, Inputs, Comboboxen), Hotkeys und weiteren nützlichen Funktionen, sich das Leben etwas einfacher machen kann.

    Das wäre eher ein Beispiel wie man es auf gar keinen Fall machen sollte.

    Ich habe Dein Script aus Deinem Beitrag gelöscht, weil Du dort Deine EMail-Zugangsdaten drinstehen hast. Sowas macht man schonmal gar nicht!

    Ändere Dein EMail-Passwort umgehend! Das Script haben schon mehrere Leute heruntergeladen.

    Dein Script war aber auch sonst total fehleranfällig und sicher kein Beispiel für Anfänger. So sollte man einen Launcher ganz sicher nicht schreiben:

    - Absolute Pfadangaben (die nur bei Deinem Rechner zutreffen)

    - Send und MouseMove/-Click (letztere auch noch mit absoluten Koordinaten)

    - Sleep mit Werten, die vielleicht bei Dir funktionieren (auf Deinem Rechner mit Deiner Internetverbindung)

    - Einbiinden von Grafiken und Icons ohne die Grafiken/Icons mit zu posten

    - EMail-Zugangsdaten (hardcodiert im Script)

    - Die Flash-Funktionen mit (geschätzt) 50 GUICtrlSetColor und ebensovielen Sleep-Befehlen (schonmal etwas von Schleifen und Arrays gehört?)

  • Wortanfang Schreibweise

    • Oscar
    • 24. April 2021 um 10:15
    Zitat von Banana_2_Day

    Was ist der einfachste Weg mit AutoIt?

    Es gibt zwar "_StringTitleCase", aber dort wird einfach bei jedem Wort der erste Buchstabe groß geschrieben.

    Das was Dir vorstrebt würde ein Wörterbuch (pro erkannter Sprache) erfordern. Ich denke, das dürfte mit AutoIt nur schwer zu realisieren sein.

  • Spielt ihr Online Spiele?

    • Oscar
    • 19. April 2021 um 05:10
    Zitat von Andy

    Ich hab bei Steam 16€ bezahlt, early access, bisher noch keinen einzigen Bug erlebt! Volle Empfehlung!

    Das spiele ich zur Zeit auch (im Solomodus, nur da funktionieren die Cheats).

    Ok, ich nutze ein paar Cheats, weil man in den "Ebenen" sonst keine Chance gegen die Kobolde hat. Und es macht einfach mehr Spaß mit dem großen Vikingerboot über den Ozean zu segeln, als mit dem kleinen Floß.

    Aber die Spielwelt ist derart riesig, dass es trotz der kleinen Schummeleien noch sehr viel Spaß macht.

    Und die 16€ ist es auf jeden Fall wert. Absturz hatte ich auch noch keinen.

    Manchmal hakt es etwas, wenn man sich sehr schnell dreht. Wobei ich nicht weiß, ob das vielleicht an meinem Rechner liegt (habe jetzt nicht den HiEnd-Rechner).

    Meist läuft es aber total flüssig und auf jeden Fall spielbar. Da habe ich schon "fertige" Spiele gehabt, die deutlich schlechter waren, als dieses "early access"-Game.

  • Aktualisierung verfügbarer WLAN-Netze unter Win10 prof.

    • Oscar
    • 10. April 2021 um 08:53
    Zitat von Andy

    beendet und startet das Interface WLAN.

    Und wenn ich gar kein WLAN-Interface am PC habe?

    Mein PC hängt per Netzwerkkabel am Router. Die ESPs per WLAN.

  • Aktualisierung verfügbarer WLAN-Netze unter Win10 prof.

    • Oscar
    • 9. April 2021 um 05:20
    Zitat von kormorix

    Ich habe jedoch das Problem, daß ein abgeschalteter oder entfernter AP erst nach ca. 2,5 Minuten erkannt wird. Das ist mir zu lang. Ursache scheint zu sein, daß Windows (10 professional in meinem Fall) die Liste der verfügbaren WLAN-Netze nur alles 2-3 Minuten auffrischt.

    Ich habe ein ähnliches Problem beim "Over the air"-Update meiner ESP8266-Module von der Arduino-IDE.

    Dort werden die Netzwerk-Schnittstellen auch oft nicht (gleich) erkannt.

    Meine "Lösung" dafür mutet etwas kurios an, aber sie funktioniert bei mir immer:

    Ich habe auf meinem Smartphone (Android) die App "Fing" installiert. Mein Smartphone ist im gleichen WLAN eingeloggt, wie die ESP-Module.

    Dann mache ich mit Fing einen WLAN-Scan und schon erscheinen alle ESP-Schnittstellen in der Arduino-IDE (auf dem PC).

    Ich kann nicht sagen, woran das liegt oder was genau Fing da ausführt, aber es funktioniert. :)

  • 2 CSV Dateien zusammenfügen

    • Oscar
    • 27. März 2021 um 14:01
    Zitat von gmmg

    Ich schau mir das am Montag an und werde berichten.

    Du solltest lieber erstmal etwas dazu sagen, ob die Dateien wirklich gleich lang sind (Zeilenanzahl).

    Wenn das nämlich nicht gegeben ist, dann brauchst Du eine andere Lösung.

  • 2 CSV Dateien zusammenfügen

    • Oscar
    • 26. März 2021 um 16:40

    Vorausgesetzt, dass beide Dateien gleich viele Zeilen besitzen, kann man das ganz einfach so lösen:

    AutoIt
    #include <File.au3>
    Global $aFile1, $aFile2, $aOut
    _FileReadToArray(@ScriptDir & '\datei1.csv.txt', $aFile1, $FRTA_NOCOUNT + $FRTA_ENTIRESPLIT, ',')
    ;~ _ArrayDisplay($aFile1)
    _FileReadToArray(@ScriptDir & '\datei2.csv.txt', $aFile2, $FRTA_NOCOUNT + $FRTA_ENTIRESPLIT, ',')
    ;~ _ArrayDisplay($aFile2)
    Global $sOut = ''
    For $i = 0 To UBound($aFile1, $UBOUND_ROWS) - 1
        For $j = 0 To UBound($aFile1, $UBOUND_COLUMNS) - 1
            $sOut &= $aFile1[$i][$j] & ','
        Next
        For $j = 0 To UBound($aFile2, $UBOUND_COLUMNS) - 1
            $sOut &= $aFile2[$i][$j] & ','
        Next
        $sOut = StringTrimRight($sOut, 1) & @CRLF
    Next
    Global $hFile = FileOpen(@ScriptDir & '\zusammen.csv.txt', 2)
    If $hFile <> -1 Then
        FileWrite($hFile, $sOut)
        FileClose($hFile)
    EndIf
    Alles anzeigen
  • Hot Hot Hotfolder?

    • Oscar
    • 21. März 2021 um 12:31
    Zitat von Raeuber_Hotzenplotz

    Ich habe eine inidatei, die mit neuen Daten gefüllt wird, wird dieser Inhalt geändert, soll der Inhalt ausgegeben werden

    Ja, das ist möglich:

    AutoIt
    #include <APIShellExConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <MsgBoxConstants.au3>
    #include <WinAPI.au3>
    #include <WinAPIShellEx.au3>
    
    #cs Moegliche Werte bei den Events von _WinAPI_ShellChangeNotify()
        Global Const $SHCNE_ALLEVENTS = 0x7FFFFFFF
        Global Const $SHCNE_ASSOCCHANGED = 0x8000000
        Global Const $SHCNE_ATTRIBUTES = 0x00000800
        Global Const $SHCNE_CREATE = 0x00000002
        Global Const $SHCNE_DELETE = 0x00000004
        Global Const $SHCNE_DRIVEADD = 0x00000100
        Global Const $SHCNE_DRIVEADDGUI = 0x00010000
        Global Const $SHCNE_DRIVEREMOVED = 0x00000080
        Global Const $SHCNE_EXTENDED_EVENT = 0x04000000
        Global Const $SHCNE_FREESPACE = 0x00040000
        Global Const $SHCNE_MEDIAINSERTED = 0x00000020
        Global Const $SHCNE_MEDIAREMOVED = 0x00000040
        Global Const $SHCNE_MKDIR = 0x00000008
        Global Const $SHCNE_NETSHARE = 0x00000200
        Global Const $SHCNE_NETUNSHARE = 0x00000400
        Global Const $SHCNE_RENAMEFOLDER = 0x00020000
        Global Const $SHCNE_RENAMEITEM = 0x00000001
        Global Const $SHCNE_RMDIR = 0x00000010
        Global Const $SHCNE_SERVERDISCONNECT = 0x00004000
        Global Const $SHCNE_UPDATEDIR = 0x00001000
        Global Const $SHCNE_UPDATEIMAGE = 0x00008000
        Global Const $SHCNE_UPDATEITEM = 0x00002000
        Global Const $SHCNE_DISKEVENTS = 0x0002381F
        Global Const $SHCNE_GLOBALEVENTS = 0x0C0581E0
        Global Const $SHCNE_INTERRUPT = 0x80000000
    #ce
    
    OnAutoItExitRegister('OnAutoItExit')
    Opt('GUIOnEventMode', 1)
    
    Global $sNotifyDir = @ScriptDir ; das zu ueberwachende Verzeichnis
    If StringRight($sNotifyDir, 1) <> '\' Then $sNotifyDir &= '\'
    Global $bRecursive = False ; True = mit Unterverzeichnisse, False = ohne Unterverzeichnisse
    Global $sIniFile = 'test.ini' ; die zu ueberwachende Inidatei (im obigen Verzeichnis)
    
    Global $hGui = GUICreate('Test', 800, 400)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui') ; Funktion die beim schließen des Fensters aufgerufen wird
    Global $idEdit = GUICtrlCreateEdit('', 10, 10, 780, 380)
    
    Global $iNotifyMsg = _WinAPI_RegisterWindowMessage('SHELLCHANGENOTIFY') ; die Message bei Windows registrieren
    GUIRegisterMsg($iNotifyMsg, 'WM_SHELLCHANGENOTIFY') ; das Fenster für den Empfang der Message registrieren
    Global $iID = _WinAPI_ShellChangeNotifyRegister($hGui, $iNotifyMsg, $SHCNE_UPDATEITEM, BitOR($SHCNRF_INTERRUPTLEVEL, $SHCNRF_SHELLLEVEL, $SHCNRF_RECURSIVEINTERRUPT), $sNotifyDir, $bRecursive) ; Windows mitteilen welches Verzeichnis überwacht werden soll
    If @error Then ; wenn das fehlschlägt, dann...
        MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Fehler', '"ShellChangeNotifyRegister" ist fehlgeschlagen.')
        Exit ; Programm mit Fehlermeldung beenden
    EndIf
    GUISetState()
    WinWaitClose($hGui) ; warten bis das Fenster geschlossen wird
    
    Func _CloseGui()
        Exit
    EndFunc   ;==>_CloseGui
    
    Func OnAutoItExit()
        If $iID Then _WinAPI_ShellChangeNotifyDeregister($iID)
    EndFunc   ;==>OnAutoItExit
    
    Func WM_SHELLCHANGENOTIFY($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg
        Local $sPath = _WinAPI_ShellGetPathFromIDList(DllStructGetData(DllStructCreate('dword Item1; dword Item2', $wParam), 'Item1'))
        If $sPath = $sNotifyDir & $sIniFile Then
            GUICtrlSetData($idEdit, FileRead($sNotifyDir & $sIniFile))
        EndIf
    EndFunc   ;==>WM_SHELLCHANGENOTIFY
    Alles anzeigen
  • Hot Hot Hotfolder?

    • Oscar
    • 21. März 2021 um 09:00
    Zitat von Raeuber_Hotzenplotz

    warum wird die geänderte datei 2mal hintereinander angezeigt

    Sie wird 2 mal angezeigt, weil ein reinkopieren in das Verzeichnis eben 2 Events auslöst (Create und Update).

    Wenn Du die Datei nur einmal in dem Listview haben willst, musst Du Dich für ein Event entscheiden (If-Abfrage mit Event in lParam).

  • Datei öffnen über ShellExecute

    • Oscar
    • 17. Februar 2021 um 05:13
    Zitat von kayes

    Oscar => bitte nach H&U verschieben.

    Verschoben!

    Oscar : Danke, Musashi :)

  • Raspberry Pi AutoIT

    • Oscar
    • 28. Januar 2021 um 17:20

    Je nachdem, was Du vorhast, aber wenn das mit einem Arduino/ESP8266 machbar ist, könnte ich Dir weiterhelfen.

  • ControlGetPos($hControl, '', '')

    • Oscar
    • 17. Januar 2021 um 08:51

    Wenn Du bei ControlFocus das Child korrekt setzt: ControlFocus($hEdit, '', $hListView), dann geht ControlGetPos auch mit Leerstrings: ControlGetPos($hListView, '', '').

  • Animierte Figuren (Assistant/Wizard/Microsoft "Agent") als UDF/Plugin etc.?

    • Oscar
    • 8. Januar 2021 um 14:13

    Nicht als UDF, aber mittels Timer eingebunden (asynchron): GIF-Animation mit den neuen AutoIt-Funktionen

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™