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

Beiträge von alpines

  • Speicherabbild -Analyse

    • alpines
    • 12. November 2018 um 22:08
    Zitat von fakeraol

    Das ist das ganze Script, alle Variablen global, so daß nie neue angelegt werden, wie es bei Unachtsamkeit in einer Funktion passieren könnte.

    Dann irritiert mich aber das GUIGetMsg. Du hast doch keine GUI, wieso versuchst du die Nachrichten zu verarbeiten?

    Ansonsten würde ich mir das FileWrite mal genauer anschauen, vielleicht schreibt es in die Datei und der Buffer wird im RAM nicht gecleared.

    Öffne und schließ jedes Mal das Handle explizit um das genauer zu untersuchen(, oder probier FileFlush nach jedem FileWrite?)

  • Speicherabbild -Analyse

    • alpines
    • 12. November 2018 um 10:15

    Vielleicht hast du noch woanders ein Speicherleck, denn das kann nicht dein gesamtes Script sein.

    Immerhin versuchst du vom globalen Scope ein Return zu senden und das funktioniert nicht.

    Poste doch mal den Rest, vielleicht vergisst du einfach irgendwo dein DllHandle ordnungsgemäß zu schließen.

  • TCP-Client: Abfrage nach Verbindungsabbruch zum TCP-Server

    • alpines
    • 10. November 2018 um 15:05

    Du musst zwischen dem @ und dem Namen das Leerzeichen entfernen wenn du willst, das ich eine Benachrichtigung bekomme.

    Die Umsetzung an sich ist nicht übel, das kannst du so machen. Solltest aber immer beachten wann du dein Adlib registrierst um auch gültige Pakete zu senden.

    Das "" vor dem @LF kannst du weglassen, das ist nicht notwendig. Und noch 'ne Kleinigkeit wäre der Name der Funktion. Der Plural von Heartbeat schreibt sich Heartbeats.

    Ansonsten musst du vielleicht mit dem Timing noch rumspielen, ich weiß nicht in welchem Abstand du Pakete sendest/empfängst aber ansonsten schaut das eigentlich ok aus.

  • Funktion "WinMove" funktioniert nicht im kompilierten Skript

    • alpines
    • 9. November 2018 um 17:30

    Sleep mal eine knappe Sekunde bevor du WinMove verwendest, eventuell versuchst du zu schnell das Fenster zu verschieben.

    Du wartest nämlich nur solange bis das Fenster erstellt wurde, aber nicht sichtbar bzw. aktiv ist.

  • Editbox nachträglich in TabControl verschieben

    • alpines
    • 8. November 2018 um 09:44
    Zitat von Code-Jack

    Alpines, ich hatte wirklich brav RTFM gemacht. Aber ich finde die Erklärungen in den Hilfedateien noch immer nicht klar genug.

    Hilfe und Dokumentation schreiben ist schon eine Kunst für sich.

    Auch wenn es nicht implizit davon herausgeht so kann man es sich um ein paar Ecken denken, denn wenn ich switche bin ich ja praktisch in dem Zustand wo ich gerade die TabSeite neu erzeugt habe und Controls hinzufüge, und wenn man sowas macht, dann setzt man ja immer ein GUICtrlCreateTabItem("") drunter. Dass das suboptimal formuliert ist, liegt wohl auf der Hand.

    Falls dich sowas wirklich stört kannst du dazu gerne in den entsprechenden Hilfe-Threads was dazu posten, wir sorgen schon dafür, dass in den nächsten Hilfeversionen (auch die aktuelle Online-Hilfe) dann geupdatet wird, damit solche Missverständnisse in Zukunft nicht mehr auftreten.

  • Editbox nachträglich in TabControl verschieben

    • alpines
    • 7. November 2018 um 21:57
    Zitat von Code-Jack

    Du hattest den Hilfe-Eintrag zu GUICtrlCreateTabItem verlinkt. Dort ist es tatsächlich explizit für GUISwitch erwähnt, dass man die Struktur "once again" abschließen soll.

    Dieser Hinweis wäre in der Hilfedatei meiner Meinung nach deutlich besser im Eintrag zu GUISwitch aufgehoben.

    Ich finde den Hilfe-Eintrag zu GUISwitch nicht nur spärlich, sondern sogar missverständlich.

    GUISwitch:

    Englische Hilfe: Using the tabitemID allow to create new control in the specified tabitem control. Don't forget to close tabitem definition GUICtrlCreateTabItem("")

    Deutsche Hilfe: TabitemID ist zu benutzen, um neue Controls in dem angegebenen tabitem zu erstellen. Es darf nicht vergessen werden, das tabitem mit der Funktion GUICtrlCreateTabItem("") zu schließen.

    GUICtrlCreateTabItem:

    Englische Hilfe: It is important to close the tab structure by creating a final tabitem control with a null text - GUICtrlCreateTabItem("").

    Deutsche Hilfe: Es ist wichtig die Tab-Struktur mit einem TabItem-Control mit leerem Text abzuschließen - GUICtrlCreateTabItem("")

    Also einen Fallstrick würde ich das nicht bezeichnen, in den Remarks/Bermerkungen steht es ja. Wenn man das nicht liest kann man es halt nicht wissen, da kann man noch so erfahren sein.

  • Zeilen in Exceltabelle löschen

    • alpines
    • 7. November 2018 um 17:40

    In der Hilfe steht doch alles was zu dazu wissen musst.

    Mit dem Doppelpunkt kannst du die Ranges angeben, willst du also A1 bis A10 beschreiben nutzt du A1:A10, analog mit anderen Spalten z.B. 2D auf A1 bis C10 -> A1:C10.

  • Editbox nachträglich in TabControl verschieben

    • alpines
    • 7. November 2018 um 08:39

    Guck dir mal meine 1. Antwort an ;)

  • GDI+ Spielerei

    • alpines
    • 5. November 2018 um 17:54
    AutoIt
    #Region Functions
    Func _LegVar($q = 5)
       Global $quantity = $q
       Global $length[$quantity+1]
       Global $x[$quantity+1], $y[$quantity+1], $alpha[$quantity+1], $step[$quantity+1]
    EndFunc

    NIEMALS Globale Variablen innerhalb von Funktionen deklarieren, da rastet dir Au3Check mit Warnungen nur aus, es ist auch kein sicherer Stil.

    Erstelle deine Globals ganz oben und in der Funktion weißt du den Wert dann zu.

  • Quellensuche zum Thema 'XML Parser'

    • alpines
    • 4. November 2018 um 21:23

    Und ich sitze hier an meinem aktuellen Projekt und friemel mir einen eigenen XML-Parser zusammen damit ich keine UDF nutzen muss :D

    Auf jeden Fall eine hübsche Sammlung, man hat viele Alternativen wenn man XML in AutoIt nutzen möchte.

    Das Problem bei der Variante mit dem Objekt ist, dass man keine Fehlerbehandlung vorimplementiert hat.

    Sofern man sich scheut in fremde UDFs "einzuarbeiten" und ihre Rückgabewerte zu verstehen, kann das schon einen großen Unterschied machen.

    Da muss ein COM-Errorhandler drauf, dann muss dieser noch den Fehler korrekt zurückgeben (bzw. für AutoIt angepasst werden, wenn man nicht einfach die Codes übernimmt, bzw. die Codes überhaupt erstmal verstehen)

    und dieser muss dann noch zusätzlich im Code (wenn das Parsing fehlschlägt o. ä.) berücksichtigt werden - also praktisch das Rad neu erfinden.

  • TCP-Client: Abfrage nach Verbindungsabbruch zum TCP-Server

    • alpines
    • 4. November 2018 um 16:10
    Zitat von TJF

    Du bekommst die Rückmeldung, wenn Du unplanmäßig die Verbindung killst (also die C# - Anwendung mittels Taskmanager killst)?

    Auch da bekomme ich eine Nachricht. Scheint als ob Windows die Verbindungen ordentlich aufräumt und beendet.

    Selbst wenn Windows das aber nicht machen würde sollte es nicht überraschen, dass dort kein Fehler geschmissen wird, weil eben die Verbindung nicht ordnungsgemäß beendet wurde.

    Da hast du nur die Möglichkeit Daten an den Client zu schicken und zu prüfen ob er noch aktiv ist.

  • TCP-Client: Abfrage nach Verbindungsabbruch zum TCP-Server

    • alpines
    • 4. November 2018 um 15:55
    Zitat von TJF

    Nach allem, was ich bisher versucht habe, klappt die Kommunikation (hier die @error -Rückmeldung) - nach Killen des Servers - nur zwischen Autoit-Programmen. Bin gespannt, ob jemand findet, woran das liegt ...

    Wir kennen die Implementation des Servers in der Android App nicht.

    Ich habe ein kleines C# Beispiel getestet was vernünftig die Verbindung schließt und dort schmeißt er mir direkt ein @error wenn ich die Anwendung beende.

    Es kommt also ganz auf die Implementation des Servers an, wenn du dich auf die nicht verlassen kannst, dann musst du Heartbeats senden, sonst hast du keine andere Möglichkeit.

  • StdinWrite / -Read ohne Child Process möglich?

    • alpines
    • 2. November 2018 um 11:00

    Ich weiß ja nicht was deine Subthreads machen aber du kannst doch in einem Subthread einfach die python-exe starten und die Ausgabe in eine Datei pipen.

    Dein Subthread kann diese Datei zu jeder Zeit auslesen und ist nicht an die Startdauer von der python-exe gebunden.

    Main.exe startet Subthread. Subthread startet Python.exe mit Piping in eine Datei, Subthread lest die Datei zu jeder Zeit aus.

    Die _RunDOS verwendet RunWait, du kannst aber auch stattdessen nur Run nutzen, dann wartest du auch nicht bis die Anwendung beendet ist.

    // Ich dachte deine Python-exe wäre ein Subthread, aber du scheinst das ja schon vorher zu starten.

    Wenn du die Python-exe weit im voraus startest ohne etwas zu Pipen wirst du wohl nicht so einfach an das StdOut kommen wenn du im nachhinein ran möchtest.

    Also lass es im voraus in eine Datei pipen und lies sie aus.

  • StdinWrite / -Read ohne Child Process möglich?

    • alpines
    • 2. November 2018 um 10:23

    Du musst das Skript auch über die Shell ausführen, das Piping wird nämlich von der Shell übernommen.

    In AutoIt kannst du dafür die _RunDOS-Funktion verwenden.

    Kompilierst du ein Programm welches in StdOut seine Parameter aus $CMDLine schreibt, und du

    _RunDOS("compiled.exe myparam1 > output.txt", dann wirst du den StdOut auch in die Datei pipen können, oder direkt in deinen Prozess, wie du halt möchtest.

    Dabei wird die compiled.exe nur myparam1 als Parameter bekommen und den Rest vollständig ignorieren.

  • StdinWrite / -Read ohne Child Process möglich?

    • alpines
    • 2. November 2018 um 09:56
    Zitat von borsTiHD

    Unterm Strich würde ich gerne StdinWrite/-Read auf Programme anwenden, die KEINE Child Prozesse sind.

    Kannst du die Ausgabe des Prozesses nicht einfach in deinen Childprozess pipen und dann deinen Childprozess auslesen?

    https://ss64.com/nt/syntax-redirection.html

  • TCP-Client: Abfrage nach Verbindungsabbruch zum TCP-Server

    • alpines
    • 1. November 2018 um 17:00
    Zitat von TJF

    Hier mal eine kleine Modifikation anhand der Hilfe-Funktionsscripten. Leicht angepasst. Am besten zuerst den Server kompilieren und starten, danach den Client. Ohne den eingefügte Bereich (Client sendet $recv ...) beendet der Client, weil $iSocket <> -1

    Deine Struktur sieht auch ziemlich sketchy aus.

    Du solltest grundsätzlich in der Schleife wo du Clients annimmst nicht auf Nachrichten horchen, denn beim nächsten Durchlauf wird die Clientvariable mit TCPAccept -1 überschrieben, da sich dein Client ja nur einmal verbindet.

    Dass dein Client nicht mehr den Server erreichen kann liegt wohl daran, dass AutoIt erkennt, dass du die Socketvariable überschrieben hast und automatisch die Verbindung beendet.

    Warte im Server bis du einen Client hast und springe aus der Schleife raus, dann gehst du in eine Schleife rein, in der du eingehende Daten auswertest und ggf. antwortest.

    Dein macht es ja einigermaßen richtig, einmal verbinden und danach in einer Schleife Senden/Empfangen.

  • Editbox nachträglich in TabControl verschieben

    • alpines
    • 1. November 2018 um 08:48
    Zitat von Code-Jack

    _GUICtrlTab_SetCurSel() ist hier mein Freund, dachte ich ...

    Doch da gibt es eine Sonderbarkeit:

    Die Zeile 57 ist erforderlich, damit Zeile 58 ihren erwarteten Dienst tut. Komisch.

    Zitat von _GUICtrlTab_SetCurSel - Parameters

    $iIndex 0-based item index

    :rolleyes :

    Zitat von Code-Jack

    _GUICtrlTab_SetCurSel($idTabCtrl, 1)
    _GUICtrlTab_SetCurSel($idTabCtrl, 2)

    Zitat von Code-Jack

    _GUICtrlTab_SetCurSel($idTabCtrl, 2)
    _GUICtrlTab_SetCurSel($idTabCtrl, 1)

  • Editbox nachträglich in TabControl verschieben

    • alpines
    • 1. November 2018 um 00:03

    Verschieben kannst du die Controls in andere Tabs glaube ich nicht, aber du kannst sie löschen und anschließend neu erstellen.

    Die Zuweisung der Variablen kannst du so lassen wie sie ist, wenn du ein Control löscht und direkt im Anschluss ein neues erstellst, bekommt es die ID vom gelöschten Control.

    Du musst aber die Tabseite wechseln wenn du das Control löscht und neu erstellst (wenn du dich auf der Seite befindest wo es erstellt wird, oder ein Repaint senden.

    AutoIt
    #include <GUIConstantsEx.au3>
    
    Example()
    
    Func Example()
        Local $hGUIParent1 = GUICreate("Parent1")
        $Button1 = GUICtrlCreateButton("go", 350, 0, 50, 50)
    
        Local $idInput1 = GUICtrlCreateInput("Ich möchte in den ersten Tab!", 50, 10, 200, 20)
    
    
        GUICtrlCreateTab(10, 40, 300, 300)
        Local $idTabItem1 = GUICtrlCreateTabItem("tab1")
        Local $idInput2 = GUICtrlCreateInput("Ich möchte in den zweiten Tab!", 50, 150, 200, 20)
        Local $idTabItem2 = GUICtrlCreateTabItem("tab2")
        GUICtrlCreateTabItem("")
    
        Local $idInput3 = GUICtrlCreateInput("Auch ich möchte in den ersten Tab!", 60, 350, 200, 20)
    
    
        ;GUISwitch($hGUIParent2)
        GUISetState(@SW_SHOW)
    
        ; Loop until the user exits.
        While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
    
                Case $Button1
                    ConsoleWrite("ID vorher: " & $idInput2 & @CRLF)
                    GUICtrlDelete($idInput2)
                    GUISwitch($hGUIParent1, $idTabItem2)
                    $idInput2 = GUICtrlCreateInput("Ich möchte in den zweiten Tab!", 50, 150, 200, 20)
                    ConsoleWrite("ID nachher: " & $idInput2 & @CRLF)
    
            EndSwitch
        WEnd
    
    #cs
        Local $hGUIParent2 = GUICreate("Parent2", -1, -1, 100, 100)
    
    
        GUISwitch($hGUIParent1, $idTabItem1)
        GUICtrlCreateButton("OK", 50, 50, 50)
        GUICtrlCreateTabItem("")
    
        GUISetState(@SW_SHOW, $hGUIParent1)
        While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
            EndSwitch
        WEnd
    
    
    #ce
        GUIDelete($hGUIParent1)
       ; GUIDelete($hGUIParent2)
    EndFunc   ;==>Example
    Alles anzeigen
  • Editbox nachträglich in TabControl verschieben

    • alpines
    • 31. Oktober 2018 um 22:57

    GUISwitch wird dir dabei helfen, besonders der zweite Parameter ;) .

    Zitat von GUISwitch - Remarks

    Using the tabitemID allow to create new control in the specified tabitem control. Don't forget to close tabitem definition GUICtrlCreateTabItem("")

  • Im geöffneten Firefox eine neue Internetseite laden

    • alpines
    • 30. Oktober 2018 um 13:23

    Es sieht für dich nur so aus, ein kleiner Blick in den Quellcode liefert folgende Daten:

    HTML
    <h3>Adjustments:</h3>
    <tr>
        <td>
            <a href="/h-sc/ui?s=ADTN" title="SharpChart"><i class="icon icon-square icon-scc-pos-sq-sharp"></i></a>
            <a href="/gallery?ADTN" title="Gallery View"><class="icon icon-square icon-scc-pos-sq-gallery"></i></a>
            <a href="/freecharts/pnf?c=ADTN,p" title="P&amp;F"><i class="icon icon-square icon-scc-pos-sq-pnf"></i></a>
            <a href="/freecharts/seasonality?symbol=ADTN" title="Seasonality"><i class="icon icon-square icon-scc-pos-sq-season"></i></a>
        </td>
            <td>10/30/2018</td>
            <td>ADTN</td>
            <td>ADTRAN Inc.</td>
            <td>0.0900</td>
            <td>Dividend</td>
    </tr>
    <tr>
        <td>
            ...
    Alles anzeigen

    Du hast hier noch nicht einmal Nested-Tags, das heißt du brauchst nur ein RegEx drüber laufen zu lassen und sofern dein Speicher nicht explodiert (wenn du alles parsen möchtest, bei einzelnen Elementen ist das absolut kein Problem), hast du alles was du willst.

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™