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

Beiträge von BugFix

  • FileCopyProgress - ähnlich dem Windows eigenen Copy-Window

    • BugFix
    • 19. Januar 2026 um 20:13
    Zitat von Lottich

    Ich ging davon aus, dass der Quellpfad inklusive der Datei sein muss.

    Das ist erforderlich, wenn nur eine Einzeldatei kopiert werden soll.

  • FileCopyProgress - ähnlich dem Windows eigenen Copy-Window

    • BugFix
    • 18. Januar 2026 um 18:46
    Zitat

    Ich habe viele Versuche unternommen um das Array an deine Funktion zu übergeben.

    Das geht nicht. Die Funktion verlangt als Parameter Quellpfad und Zielpfad. Die Dateien aus dem Quellpfad werden dann in der Funktion in ein Array eingelesen und verarbeitet.

  • AutoIt portabel

    • BugFix
    • 3. Dezember 2025 um 22:23

    Danke, mit der SciTE Version klappt es. 👍

  • AutoIt portabel

    • BugFix
    • 3. Dezember 2025 um 11:00

    Ich habe hier einen PC, an dem ich nichts installieren kann. Daher probiere ich erstmals AutoIt portabel zu nutzen.
    Ich habe eine externe Festplatte mit Portable Apps erstellt. In der Struktur sieht das so aus:

    Code
    Portabel\
      .\Documents\
        .\Scripts\
          .\au3
          .\lua
      .\PortableApps
        .\AutoIt_v3  **https://www.autoitscript.com/cgi-bin/getfile.pl?autoit3/autoit-v3.zip   <-- entpackt
        .\AutoIt_v3\SciTE  <-- die Lite Version ersetzt durch Kopie von einer installierten Vollversion
      .\Start.exe

    Da PortableApps nur Ordner im Hauptverzeichnis scannt, wird SciTE.exe nicht gefunden - habe mir also eine SciTEStart.exe geschrieben, die mit im AutoIt Ordner liegt.

    Soweit klappt auch das meiste. Ich kann Skripte schreiben und kompilieren. Autovervollständigung jedoch nicht. Das Kürzel wird eingefärbt, aber nach dem Leerzeichen wird nicht vervollständigt.
    Auch DebugToConsole schlägt fehl: Lua: error checking global scope for command 'InvokeTool AutoItTools.DebugConsoleWriteAdd'

    Das Einbinden von Lua Komponenten schlägt hier irgendwie fehl. Auch meine Lua Skripte z.B. zum Edging, werden geladen, aber es erfolgt keine Reaktion im Editor. :/

    Hat jemand all das bereits funktionierend portabel umgesetzt?

  • Funktion mit unbestimmter Anzahl von Parametern

    • BugFix
    • 23. Oktober 2025 um 12:19
    AutoIt
    ConsoleWrite(_Until_10_Param('Bla', 'Blub', 'Blob') & @CRLF)
    
    
    Func _Until_10_Param($_1, $_2=Null, $_3=Null, $_4=Null, $_5=Null, $_6=Null, $_7=Null, $_8=Null, $_9=Null, $_0=Null) ; min. 1 parameter
    	Local $aParam[] = [$_1, $_2, $_3, $_4, $_5, $_6, $_7, $_8, $_9, $_0]
    	Local $aParamStr[] = ['$_1', '$_2', '$_3', '$_4', '$_5', '$_6', '$_7', '$_8', '$_9', '$_0']
    	Local $sOut = 'Func: _Until_10_Param' & @CRLF & '$_1: ' & $_1 & @CRLF
    	For $i = 1 To UBound($aParam) -1
    		If $aParam[$i] = Null Then ExitLoop
    		$sOut &= $aParamStr[$i] & ': ' & $aParam[$i] & @CRLF
    	Next
    	Return $sOut
    EndFunc
    Alles anzeigen
    Code
    Out:
    Func: _Until_10_Param
    $_1: Bla
    $_2: Blub
    $_3: Blob


    EDIT:

    Manche Funktionen gestaltet man ja auch mit einem Leerstring als Vorbelegung für eine Variable, aber es folgen trotzdem noch besetzte Parameter. Deshalb verwende ich für echte leere Variablen die Vorbelegung: NULL.

  • Funktion mit unbestimmter Anzahl von Parametern

    • BugFix
    • 23. Oktober 2025 um 12:02

    Du möchtest den Aufruf parsen? Also als Ergebnis in etwa:

    >> Funktion: _EineFunc
    >> Param_1: "Bla"
    >> Param_2: "Blub"

    Soll das in SciTE passieren oder im kompilierten Skript?

  • GuiCtrlFrame

    • BugFix
    • 17. Oktober 2025 um 20:39

    Ich wollte eine Methode haben, um das Ergebnis einer Eingabeprüfung durch farbliche Markierung hervorzuheben, bzw. Felder zu markieren in der Reihenfolge, wie sie genutzt werden sollen. Die Zuweisung zu einem Ctrl sollte möglichst einfach sein, aber eine Bindung zu einem Ctrl nicht zwingend. Entschieden habe ich mich für einen Rahmen als Kollektion von 4 Labeln. Der Rahmen verfügt über eine fixe Farbe und eine veränderlich Nachrichtenfarbe. Zwischen den Farben kann gewechselt werden. Gespeichert wird alles in einer Map, die bei der Erstellung zurückgegeben wird.
    Ausführliche Details, wie immer, in den Funktionsheadern.

    Code
    _GuiCtrlFrame_Create        Erstellt ein Rahmen-Ctrl in der angegebenen Farbe und Strichstärke.
    _GuiCtrlFrame_SetColor      Setzt die Nachrichtenfarbe oder wechselt zwischen .color und .colorMsg.
    _GuiCtrlFrame_SetThickness  Setzt eine neue Strichstärke für einen Rahmen.
    _GuiCtrlFrame_Show          Zeigt oder versteckt einen Rahmen.
    _GuiCtrlFrame_AssignID      Weist einen Rahmen einem Ctrl zu oder demselben Ctrl nachdem dieses verschoben wurde
                                oder löscht den Rahmen.

    Die UDF und ein kleines Bsp.-Skript findet ihr im Anhang.

    Dateien

    GuiCtrlFrame.au3 10,39 kB – 130 Downloads GuiCtrlFrame_example.au3 2,17 kB – 148 Downloads
  • Datenbank : Teil 1 erstellen einer DB

    • BugFix
    • 30. September 2025 um 15:11

    Hmm,

    Alina: Ich habe eine DB erstellt, habe ich das richtig gemacht? (konkrete Frage zu einem DB Thema)
    Peter so: Ich nehme statt DB Textdateien.

    Mich stören deine Einlassungen nicht und du kannst das gern handhaben, wie du möchtest. Es war einfach nur eine Antwort am Thema vorbei.
    Hätte Alina nach Möglichkeiten zur Datenorganisation gefragt, wäre ich voll bei dir, dass man ggf. auch andere Lösungen ins Auge fassen kann.

    Ansonsten liebe Foristen: Contenance. ;)

  • Fronius Webseite auslesen

    • BugFix
    • 8. September 2025 um 12:51

    Ich weiß nicht, wie das bei Fronius ist. Allgemein hat man doch aber problemlos im lokalen Netz Zugang zu den Daten.

    Mal als Idee: Wie wärs da mit einem eigenen Mini Web-Server (Arduino), da kannst du den Zugang nach eigenem Gusto regeln.

  • Splashscreen-Gui mit Terminate Button / GuiEvents richtig abfangen

    • BugFix
    • 21. August 2025 um 22:21

    Mal noch als Tipp:

    Um nicht zu Überschneidungen im zeitlichen Ablauf der Adlib-Funktion zu kommen habe ich mir angewöhnt, beim Eintritt in die Adlib-Funktion diese zuerst mit AdlibUnregister vor einem erneuten Aufruf während der Abarbeitung zu schützen. Am Ende der Funktion aktiviere ich dann wieder AdlibRegister .

  • Dateipfad mit Makronamen besetzen

    • BugFix
    • 1. August 2025 um 19:35

    OK, konnte es anders lösen:

    Die Anwendungen selbst sind alle an einheitlichen Speicherorten. Die Pfade zu den (möglicherweise individuell angelegten) Datenspeicherorten sind in \AppData\Local\ANWENDUNG\data hinterlegt. Damit kann ich alles problemlos auslesen und auch vereinheitlichen.

    Danke für eure Mühe.

  • Dateipfad mit Makronamen besetzen

    • BugFix
    • 24. Juli 2025 um 15:09

    Ja, das hatte ich schon so geplant, dass "BugFix" nur mit "@Username" ersetzt wird, wenn "\users\" davor steht. Die Abhängigkeiten von Makros zu bestimmten Pfadkonstellationen muss ich natürlich gegenprüfen.

    Ich erstelle eine Auflistung aller in unserer Firma (an allen Standorten) genutzten, messaparaturspezifischen Daten (Kalibrierdaten, Definitionsdateien etc.). Ziel ist, dass alle Apparaturen und Meßgeräte mit ihren Definitions- und Kalibrierdaten auf jedem Meßfahrzeug-PC hinterlegt sind, um im Bedarfsfall ohne Einrichtungsaufwand Apparaturen und Meßgeräte tauschen zu können.

  • Dateipfad mit Makronamen besetzen

    • BugFix
    • 24. Juli 2025 um 10:44

    Der Titel ist vielleicht etwas verwirrend. Hier im Detail:

    Ich möchte auf verschiedenen Rechnern Pfade, die von Anwendungen genutzt werden (öffnen, speichern, template, etc.) auslesen (FileOpenDialog). Den Pfad möchte ich aber nun allgemeingültig in einer Übersicht mit Makros ablegen. Also aus "C:\users\bugfix" wird "C:\users\@UserName".

    Mein Ansatz wäre jetzt:

    • Alle pfadrelevanten Makros vorm Auslesen der Pfade ausführen und speichern
    • Nach jedem Auslesen für jedes Pfadmakro probieren, ob es Pfadbestandteil ist und ggf. mit dem Makronamen ersetzen

    Oder gibt es eine andere Möglichkeit?

  • Arduino - Problem

    • BugFix
    • 6. Juli 2025 um 19:28

    Hi,

    bin erst jetzt wieder dazu gekommen. Erst mal Danke für die Tipps.

    Ich muss zugeben, ich war etwas faul und hatte mir den Sketch KI'en lassen. :rofl:
    Die KI mochte es aber nur kompliziert und kann natürlich (ebenso wie Wokwi) nicht mit LOW-Ansteuerung für die Relais umgehen. Ein reiner Austausch von HIGH und LOW bringt da wenig.

    Nun habe ich meine Faulheit überwunden und mich mal an eigenen Code gemacht. :whistling:
    Funktioniert so, wie gewollt:

    • Tastendruck aktiviert erstes/nächstes Relais
    • wird innerhalb der eingestellten Laufzeit gedrückt, wird nächstes Relais aktiv und Zeit startet neu
    • wird innerhalb der eingestellten Laufzeit gedrückt und das letzte Relais war aktiv, wird abgeschaltet
    Arduino
    const int relayPins[] = {2, 3, 4};    // Pin-Nummern für die Relais
    const int buttonPin = 5 ;             // Taster zum Durchschalten der Relais
    const int relayCount = 3;             // Anzahl der Relais
    const unsigned long onTime = 5000;    // Einschaltdauer in Millisekunden, 5 Sekunden im Test
    bool relayActive = false;             // Irgendein Relais aktiv
    int curRelayIndex = -1;               // Array-Index des aktiven Relais (0 - 2; -1 wenn keins aktiv)
    int prevRelayIndex = -1;              // Array-Index des zuletzt aktiven Relais (0 - 2; -1 wenn zuletzt keins aktiv)
    unsigned long lastButtonTime = 0;     // Zeitpunkt des letzten Buttondrucks
    
    
    void setup() {
     for (int i = 0; i < relayCount; i++) {
       pinMode(relayPins[i], OUTPUT);    // Pins für Relaisansteuerung definieren
       digitalWrite(relayPins[i], HIGH); // Relaispins HIGH setzen = Relais OFF 
     }
     pinMode(buttonPin, INPUT_PULLUP);   // Taster mit internem Pull-Up Widerstand
    }
    
    
    void loop() {
     if (lastButtonTime != 0) {
        if (millis() - lastButtonTime >= onTime) {           // Es ist ein Relais aktiv und die Zeit ist abgelaufen
         digitalWrite(relayPins[prevRelayIndex], HIGH);      // letztes aktives Relais OFF
         resetVars();                                        // alles auf Anfang
       }
     }
     int reading = digitalRead(buttonPin);                 // Abfrage, ob Button gedrückt
     if (reading == 0) {                                   // Taster wurde betätigt
       // das erste/nächste Relais wird aktiviert (wenn das aktive das letzte: alle OFF)
       setNextRelay();                                     // Index des nächsten Relais setzen (curRelayIndex)
       if (relayActive) {                                  // ist ein Relais aktiv?
         digitalWrite(relayPins[prevRelayIndex], HIGH);    // aktives Relais OFF
         if (curRelayIndex == -1) {
           resetVars();                                    // alles auf Anfang        
         } else {
           activateCurRelay();                             // nächstes Relais ON, lastButtonTime u. prevRelayIndex setzen
         }
       } else {                                            // kein Relais aktiv
         activateCurRelay();                               // nächstes (erstes) Relais ON, lastButtonTime u. prevRelayIndex setzen
       }
     }
     delay(100);
    }
    
    
    void activateCurRelay() {
     /* 
      *  hier zusätzlicher Code während Relaisaktivität, z.B. externe LED
      */
     digitalWrite(relayPins[curRelayIndex], LOW);
     prevRelayIndex = curRelayIndex;
     lastButtonTime = millis();
     relayActive = true;
    }
    
    
    void setNextRelay() {
     if (!relayActive) {                     // wenn kein Relais aktiv, nächstes ist Index 0
       curRelayIndex = 0;
     } else {                                // wenn ein Relais aktiv
       curRelayIndex += 1;
       if (curRelayIndex == relayCount) {    // wenn letztes Relais bereits aktiv
         curRelayIndex = -1;
       }
     }
    }
    
    
    void resetVars() {
     curRelayIndex = -1; 
     prevRelayIndex = -1;
     lastButtonTime = 0; 
     relayActive = false;
    }
    Alles anzeigen
  • Arduino - Problem

    • BugFix
    • 21. Juni 2025 um 18:40

    Hi,

    nach Jahren :rofl: will ich nun endlich meine Steuerungen an den Arduino übergeben. Für den Anfang erst mal nur den Lüfter.

    Testprozedere:
    - Arduino Nano
    - Elegoo 4 Kanal 5V Relais Modul
    - Taster

    Mit dem Taster wird bei jedem Druck das erste/nächste Relais aktiviert. Bei erneutem Tastendruck wird das evtl. bereits aktivierte Relais deaktiviert und das folgende aktiviert. Das aktive Relais bleibt dann für eine fixe Zeit (im Test 1 Minute) aktiv.

    Mangels Taster habe ich hierfür die beiden grünen gekreuzten Drähte genommen. Leider tut sich nichts. Gebe ich auf die IN-Kontakte des Relais Moduls direkt GND, zieht das entsprechende Relais.

    Wo liegt mein Fehler? Pulldown habe ich 10k genommen, sollte völlig ausreichen.

    nano_4relay.pdf


    EDIT: Der Sketch fehlt ja noch:

    Arduino
    const int relayPins[] = {2, 3, 4}; // Relais Pins
    const int buttonPin = 5 ;              // Taster Pin
    const int relayCount = 3;             // Anzahl der Relais
    const unsigned long onTime = 60000;    // Einschaltdauer in Millisekunden (1 Minute)
    
    int currentRelay = 0;
    unsigned long lastDebounceTime = 0;
    int lastButtonState = LOW;
    bool relayActive = false;
    unsigned long relayStartTime = 0;
    
    void setup() {
      for (int i = 0; i < relayCount; i++) {
        pinMode(relayPins[i], OUTPUT);
        digitalWrite(relayPins[i], LOW); // Relais zu Beginn ausschalten
      }
      pinMode(buttonPin, INPUT_PULLUP); // Taster mit internem Pull-Up Widerstand
    }
    
    void loop() {
      int reading = digitalRead(buttonPin);
    
      // Entprellung des Tasters
      if (reading != lastButtonState) {
        lastDebounceTime = millis();
      }
    
      if ((millis() - lastDebounceTime) > 50) {
        if (reading == LOW && lastButtonState == HIGH) { // Nur bei steigender Flanke
          // Taster wurde gedrückt
          toggleRelay();
        }
      }
      lastButtonState = reading;
    
      // Überprüfen, ob ein Relais aktiv ist und die Einschaltdauer abgelaufen ist
      if (relayActive && (millis() - relayStartTime) >= onTime) {
        deactivateRelay(currentRelay);
        relayActive = false;
      }
    }
    
    void toggleRelay() {
      // Aktuelles Relais deaktivieren
      if (relayActive) {
          deactivateRelay(currentRelay);
          relayActive = false;
      }
    
      // Nächstes Relais aktivieren
      currentRelay = (currentRelay + 1) % relayCount;
      activateRelay(currentRelay);
      relayActive = true;
      relayStartTime = millis();
    }
    
    
    void activateRelay(int relayIndex) {
      digitalWrite(relayPins[relayIndex], HIGH);
      // zusätzliche Aktionen ausführen, wenn ein Relais aktiviert wird
    }
    
    void deactivateRelay(int relayIndex) {
      digitalWrite(relayPins[relayIndex], LOW);
      // zusätzliche Aktionen ausführen, wenn ein Relais deaktiviert wird
    }
    Alles anzeigen
  • Android 12 - WLAN priorisieren

    • BugFix
    • 16. Juni 2025 um 22:40

    Also erst mal Danke für die Tips.

    Zitat von oh-ha

    dann setzte alle anderen Netzwerke außer Starlink als getaktete Netzwerke.

    Diese Option ist bei Android nicht vorhanden.

    Zitat von Gun-Food

    Du kannst auch das WLAN der Fritzbox als Repeater für das Starlink WLAN konfigurieren.

    Ich benötige die alte Internetverbindung noch für meine Telefonie. Die DECT Telefone nutzen die DSL Verbindung der Fritz.Box. Ich schaue mich derzeit nach preislich interessanten SIP Anbietern um, dann kann die alte Internetverbindung weg.

    Zitat von Moombas

    Du solltest jedoch in deinen Wifi Einstellungen von der jeweiligen SSID den Haken "automatisch erneut verbinden" raus nehmen

    Mein Smartphone hat diese Einstellung nicht. Speichere ich das Kennwort, wird auch automatisch neu verbunden. Alternativ müsste also bei jedem Verbinden das Passwort händisch eingegeben werden.


    Warum hatte ich das alte WLAN noch? - Auf die SSID war mein TV Stick registriert. Und ich wollte erst mal testen, ob ich überall im Haus Starlink ordentlich empfangen kann, bevor ich die Registrierung umswitche. Ich habe inzwischen noch einen TPLink gefunden und als Accesspoint für das Erdgeschoß an den Starlink gehängt (Ich hatte bei der Renovierung 2 Patchdosen zwischen Erd- und Obergeschoß verbaut, konnte ich hier gut nutzen). Der nutzt dieselbe SSID, wie der Starlink, sodass ich jetzt auch den TV Stick darauf registrieren konnte.

    Es funktioniert jetzt also Alles, wie gewollt. 👍🏻

    Bin übrigens erstaunt, was für eine Sendeleistung der TPLink hat. Ist solch Teil für die Reise, 6x6x2 cm. Im Garten, 10 m entfernt, habe ich trotz 40 cm Mauerwerk noch vollen WLAN Empfang. 🤓

  • Android 12 - WLAN priorisieren

    • BugFix
    • 14. Juni 2025 um 18:26

    Hi,

    mein Smartphone priorisiert WLAN nach der Sendeleistung des WLAN. Es wechselt dann automatisch in das mit der besten Sendeleistung, manchmal dann auch zu Mobildaten.

    Nur sagt die Sendeleistung nichts über die Qualität des Netzes dahinter aus. Meine Fritz.Box strahlt horizontal und vertikal kräftig aus und steht im ganzen Haus mit Signalqualität "sehr gut" zur Verfügung. Leider hat der Anschluss nur eine räudige DL-Quote von ca. 8 Mbit.
    Da hier vielleicht in einem oder 2 Jahren mal Glasfaseranschluss kommt, habe ich mir jetzt Starlink zugelegt. Der zugehörige Router ist recht brauchbar in horizontaler Richtung, vertikal verschlechtert sich das Signal jedoch rapide. Das ist aber überhaupt kein Problem. Denn selbst bei minimaler Sendeleistung (Das WLAN Symbol hat nur einen Bogen) habe ich immer noch einen DL von min. 20 MBit.

    Ich würde gern festlegen, dass das Starlink WLAN absoluten Vorrang hat. Aber wenn ich im Smartphone den WLAN Schlüssel speichere, wird auch automatisch mit dem WLAN verbunden, sofern es die "beste" Sendeleistung hat.

    Ich werde sowieso noch WLAN-Repeater einsetzen, dann ist das Problem eh gelöst. Interessiert mich aber, ob es auch über irgendwelche Einstellungen ginge.

  • eine etwas andere uhr mit erweiterten features

    • BugFix
    • 8. Juni 2025 um 12:47

    Du kannst dir auch gerne Anregungen aus unseren Uhrprojekten hier aus dem Forum holen. Könnte 6 - 10 Jahre her sein, da haben wir mal ziemlich viele Uhrenskripte erstellt. (War möglicherweise auch ein Contest, weiß ich nicht mehr genau)

    Bemühe mal die Forensuche.

  • Formeln in eine CSV-Datei schreiben

    • BugFix
    • 23. Mai 2025 um 16:47
    Zitat von entsel

    Noch neuer ? ;)

    Gemeint ist die Version von AutoIt, nicht von Include Dateien. 😙

    Maps sind noch nicht allzu lange in der Standardversion enthalten. Links findest du im Portal.

  • Einzelne Daten (Mengenproblem) in einem String durch array austauschen?

    • BugFix
    • 14. April 2025 um 14:17

    Du solltest besser nicht das Original verändern, sondern das Ergebnis mit den Veränderungen extra speichern und zum Austausch wieder auf das Original zurückgreifen.

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™