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

Beiträge von Andy

  • MausPosition bei ComboListe

    • Andy
    • 6. August 2009 um 12:42

    Hi,
    habs so gelöst...

    Spoiler anzeigen
    [autoit]

    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    global $hidden
    global $main = GUICreate("AutoITDeskBar2",@DesktopWidth +2,70,-2,-30, $WS_BORDER , $WS_EX_APPWINDOW )

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    dim $pos[4]=[0,1,2,3]
    $Combo1 = GUICtrlCreateCombo("Projekte", @DesktopWidth - 300, 8, 193, 25,$CBS_DROPDOWNLIST)
    GUICtrlSetData(-1, "item2|item3|ee|rr|ttt|ttt|www|qqq", "item3")
    $Beende = GUICtrlCreateButton("Beende", @DesktopWidth - 80, 8, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    $tPos = WinGetPos($main)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $mPos = MouseGetPos()
    if $hidden =false Then
    $pos = ControlGetPos("[CLASS:ComboLBox; INSTANCE:1]","","") ;daten von der combobox holen
    if @error<>1 then
    consolewrite($pos[0]&" "&$pos[1]&" "&$pos[2]&" "&$pos[3]&@crlf) ;x,y, breite, hoehe
    $mouseposallowed=0
    If $mpos[0]<$pos[0] and $mpos[1]>70 then $mouseposallowed=1 ;links von der combo und unterhalb vom fenster
    if $mpos[1]>$pos[3] +20 then $mouseposallowed=1 ;unterhalb der combo
    if $mpos[0]>$pos[0]+$pos[2] and $mpos[1]>70 then $mouseposallowed=1 ;rechts von combo und unterhalb vom fenster
    endif
    endif
    If WinActive("AutoITDeskBar2") = 0 And $hidden And $mPos[1]<2 Then
    WinActivate($main)
    WinSetState($main,"",@SW_SHOW)
    $hidden = False
    ElseIf Not $hidden And $mouseposallowed Then
    WinSetState($main,"",@SW_HIDE)
    $hidden = True
    EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    exit
    EndSwitch
    ;if $nmsg<>0 then consolewrite($nmsg&@crlf)
    WEnd

    [/autoit]

    ciao
    Andy

  • ListviewItem an run Übergeben

    • Andy
    • 6. August 2009 um 10:53

    Hi,
    nachdem du die Listview erstellt hast, fügst du mit _GUICtrlListView_AddItem() gewissermaße nur eine neue Zeile ein. Gleichzeitig beschreibst du mit diesem Befehl das erste "Feld" (Spalte) in dieser Zeile.
    Mit _GUICtrlListView_AddSUBItem() füllst du nun die anderen "Felder" (Spalten) in dieser Zeile.
    Um nun ein Item zu lesen, brauchst du die Koordinaten der Zelle die du lesen möchtest, also die Zeile in der Liste und die Spalte. Ich gebe zu, daß die hantiererei mit null- und eins-basierendem Index anfangs etwas überfordert^^
    Die Frage ist nun, auf welche Art und Weise du die Daten aus der Liste herausbekommen willst. Per Mausklick, Doppelklick, Scrollzeile und Enterdrücken, oder mit einem Button...oder oder oder...
    Letztendlich ist es egal, du musst nur irgendwie die Zeile/Spalte bzw die beiden Indexe (Indizes? wohl beides richtig^^) bestimmen und dann mit _GUICtrlListView_GetItemText() den Inhalt dieses Feldes auslesen.
    ciao
    Andy

  • Script friert nach einigen stunden ein ?

    • Andy
    • 6. August 2009 um 10:29

    Hallo,

    Zitat

    Und warum sollte ich keine Fehlermeldung im LOG bei nicht erreichbaren dns bekommen ?


    Kontrolliere doch mal die Bedingung bei der überhaupt ins Log geschrieben wird...
    Habe dein Script mit einer Wiederholzeit von 5 statt 60 Sekunden ca 2h laufen lassen, ohne Fehler. Habe auch mit verschiedenen Servern und IP-Adressen getestet, sowohl erreichbare, als auch nicht erreichbare.

    Zitat

    was sagt denn dein letzter LOG-Eintrag?

    Diese Frage hattest du nicht beantwortet...
    ciao
    andy

  • Ball stoppen

    • Andy
    • 6. August 2009 um 10:15

    Hallo,
    der Vorteil am Vorschlag von anno2008 ist auch, daß man dieses System auf so gut wie JEDES Spiel anwenden kann. Auch Schachprogramme und viele andere Strategiespiele lassen sich auf diese einfache Art darstellen.
    ciao
    Andy

  • Tutorial: Wie man Script-Fehler erfolgreich sucht/findet bzw. richtig debuggt

    • Andy
    • 6. August 2009 um 09:36

    Hallo,

    Zitat von Greenhorn

    suchst Du Hilfe oder möchtest Du Hilfestellung geben ?!?

    Da musste ich wirklich grinsen, denn daß bei so viel Text auch noch jemand zwischen den Zeilen liest, hätte ich nicht erwartet :thumbup:
    Natürlich ist man etwas fassungslos, bei einer solch mächtigen Sprache wie AutoIt nur relativ einfache Debugging-Möglichkeiten zu finden. Im Programmierer-Jura vor ca. 200 Millionen Jahren (80er^^) hatten einfache Basic-Compiler ( nicht Interpreter! ) schon ausgefeilte Debugger. Trace und Tron und Ausgabe von Registerinhalten uswusf....
    Aber vielleicht haben wir ja den falschen Denkansatz? Bei einer "einfachen" Sprache, sollte man ggf auch "einfach" coden. Als damals meine Kumpels von den simplen Sprachen wie Basic, Pascal und Fortran auf eine "Hochsprache" wie C umstiegen und als allererstes bewiesen, daß man mit C wesentlich besseren unlesbaren Spaghetticode basteln konnte als je zuvor, bin ich nicht mit umgestiegen. Denn dort war man ohne "richtigen" Debugger völlig verloren, und das war mir den Aufwand nicht wert. C mit Abstrichen lesen schaffe ich noch teilweise, aber schreiben...never^^. Wenn Programmierer nach 3 Monaten ihren eigenen Code nicht mal ansatzweise erläutern können, nur weil "zufällig" die Kommentare gelöscht wurden, dann bekomme ich Angst! Außerdem bin ich kein Programmierer, sondern Handwerker :D Was mit Basic und Assembler nicht machbar ist, naja, das braucht man auch nicht dringend :rock:

    Zitat

    Es gibt einen Debugger mit GUI, habe ich aber nie ausprobiert ...

    Ich schon...du hast weniger Zeit verschwendet ;)

    Zitat von ortho-graf

    Was könnten viele ***-Schreiber daraus lernen?

    Können kann man schon, tuen tut man nicht 8o
    Ja, es ist wie überall, die es am nötigsten haben nutzen die Möglichkeiten am wenigsten. Sind aber auch immer die lautesten Schreier wenn etwas nicht funktioniert.

    Zitat

    hat weniger Rechtschreibfehler (Tendenz gegen eins..)

    Entschuldigung, aber der Editor für die Forenbeiträge hat keine Rechtschreibkorrektur :D Habe gegen Ende doch etwas Muffensausen bekommen, daß der Beitrag im Nulldevice landet statt auf dem Server. Das ist mir leider schon öfter passiert...

    Zitat von peethebee

    Ich habe das mal gepinnt

    Du kannst den Text auch um geschätzte 200 Zeilen kürzen und mit RTFM an den meisten Stellen ersetzen. Ich habe mich das nicht getraut :rolleyes:

    ciao
    Andy

  • Tutorial: Wie man Script-Fehler erfolgreich sucht/findet bzw. richtig debuggt

    • Andy
    • 5. August 2009 um 20:25

    Hallo zusammen,

    in letzter Zeit häufen sich die "Mein Script funktioniert nicht! Warum?"-Threads hier im Forum (aber andere Foren habens da auch nicht besser^^).

    Teilweise stundenlang suchen die Scripter nach dem "Fehler" bevor sie dann entnervt das Script hier einstellen und meist schon nach einigen Minuten eine Lösungsmöglichkeit präsentiert bekommen.....

    Diese Lösung wird aber i.d.R. nicht einfach aus dem Hut gezaubert. Sicher gibt es Profis, die mit einem Blick erkennen, woran es hängt, aber in den allermeisten Fällen muss sich auch der Profi durch das Script hindurchwühlen um den Fehler einzugrenzen. Harte, meist überflüssige Arbeit, da die Scripter die Fehler oft selbst einfach finden könnten.

    Aber wie findet man nun diese Fehler "professionell"?

    Da die meisten wohl Scite als Editor verwenden, wollte ich die Verwendung der "Fehlersuchhilfen" innerhalb des Editors einmal kurz vorstellen. Ich gehe dabei von einer Vollinstallation von Scite aus.

    Unter dem Menüpunkt TOOLS finden sie sich, beispielsweise:Debug to MsgBox oder Debug to Console

    Ich behaupte jetzt, daß sich mit Hilfe dieser Funktionen 90% der Programmfehler/Probleme innerhalb kürzester Zeit finden und beheben lassen.

    Wie das denn? Nunja, in vielen Fällen handelt es sich bei den Problemen um fehlerhaften Umgang mit Variablen.

    Bsp: Ein Script erwartet in einer (Endlos-)Schleife einen bestimmten Variablen-Wert, der aber nie erreicht wird. Ergo läuft die Schleife immer weiter, das Script "hängt". Was für ein Glück gibts ein Forum, schnell das Script dort eingestellt und abgewartet! Irgendeiner wird den Fehler schon finden, während man selbst sich die Zeit im Chat vertreibt und fleissig den eigenen Hilfe-Thread "pusht". Allerdings könnte es auch früh morgens sein, niemand ist im Forum aktiv oder man hat selbst den Ehrgeiz den Fehler zu finden!

    Jetzt könnte Debug to Console ins Spiel kommen.

    Man setzt im Scite den Cursor auf die abzufragende Variable innerhalb der Schleife und drückt ALT+d.

    Scite fügt nun eine Zeile in das Script ein. Nach einem F5 um das Script zu starten wird nun jedes Mal, wenn das Script diese Zeile abarbeitet, der Variablenname und der Wert in die Console geschrieben. Alternativ bekommt man mit Debug to MsgBox diese Werte in.....einer Messagebox^^. Nebenbei erfährt man so, ob diese Schleife überhaupt aufgerufen wurde.

    Zur Not kann man sich die MsgBox auch mit dem timeout-Parameter einige Sekunden anzeigen lassen, um sie nicht immer von Hand zu bestätigen.

    Nach erfolgreicher Fehlersuche lassen sich die eingefügten Zeilen mit Debug Remove Lines wieder entfernen.

    Um abzufragen, ob eine Funktion überhaupt aufgerufen wurde, bietet sich in den Scite-Tools die Funktion Trace: Add Func Trace Lines an.

    Damit erfährt man durch eine Ausgabe in die Console, ob die Funktionen überhaupt aufgerufen wurden. Mit Hilfe der Informationen aus der Console und/oder den Msgboxen grenzt man nun immer weiter das Problem ein, irgendwann ist der Punkt erreicht, und man hat den Fehler lokalisiert.

    Aber wo kommt dieser "Fehler" her? Sehr wahrscheinlich ist ein fehlerhafter (oder falsch interpretierter) Rückgabewert eines AutoIt-Funktionsaufrufs oder eine "falsche" Variable schuld.

    Syntaxfehler werden glücklicherweise schon von Scite abgefangen. Falsch geschriebene Variablennamen finden sich, wenn man Opt('MustDeclareVars', 1)in sein Script einfügt.

    Im folgenden Beispiel erläutere ich die Vorgehensweise bei der Fehlersuche nach "falschen" Variablen- bzw. Funktionsrückgabewerten.

    Beispiel:

    Die Funktion MACHWAS() soll aufgerufen werden, wenn der Mauszeiger sich in einem bestimmten Bereich auf dem Bildschirm befindet, d.h. wenn die X-Koordinate der Mausposition größer als 100 ist. Dieser Bereich auf dem Bildschirm (die 100) wird aus einer Datei ausgelesen.

    Problem:

    Der Mauszeiger befindet sich an der "richtigen" Bildschirm-Position, aber die Funktion MACHWAS() wird nie aufgerufen! Das haben wir mit Trace: Add Func Trace Lines herausgefunden.

    Scriptausschnitt:

    $wert = filereadline("test.txt") ;Wert aus Datei auslesen (zahl in textdatei = 100)

    if mousegetpos() > $wert then machwas() ;wenn X-Koordinate der Mausposition>Wert dann machwas 

    Dieses "Script" enthält mehrere Stolpersteine. :thumbup: Aber der Reihe nach....

    Generell sollte man nach jedem Funktionsaufruf mit dem @error den Fehlercode auswerten!

    Aus der Hilfe: Wenn eine Funktion das @error-Flag setzen kann, dann sollte man es immer überprüfen, bevor man einen Rückgabewert benutzt. Wenn @error nämlich einen Fehler anzeigt, dann ist der Rückgabewert generell undefiniert...

    Zuerst lassen wir uns mit einer MsgBox den @error anzeigen. Natürlich benutzt man normalerweise die Funktion Debug To MsgBox, aber ich verwende hier der Übersicht halber eine einfache MsgBox. Man kann so alles erforderliche anzeigen lassen.

    $wert = filereadline("test.txt") ;Wert aus Datei auslesen (zahl in textdatei = 100)

    msgbox(0,"filereadline","@error="&@error) ;@error ist 0 , lt Hilfe kein Fehler

    if mousegetpos() > $wert then machwas() ;wenn X-Koordinate der Mausposition>Wert dann machwas

    msgbox(0,"mousegetpos()","@error="&@error) ;@error ist 1, lt Hilfe kein Fehler, aber eigentlich sollte MACHWAS() aufgerufen werden!

    Beide Male ist kein Fehler innerhalb der Funktionen FileReadLine() bzw MouseGetPos() aufgetreten! Wieso diese Kontrolle nicht ins Script übernehmen?

    $wert = filereadline("test.txt") ;Wert aus Datei auslesen (zahl in textdatei = 100)

    if @error = -1 then msgbox(0,"Fehler in filereadline()","@error="&@error) ;wenn fehler, dann msgbox

    if mousegetpos() > $wert then machwas() ;wenn X-Koordinate der Mausposition>Wert dann machwas 

    Ich lasse die Zeile "if @error=-1...." im weiteren Verlauf weg, um übersichtlich zu bleiben.

    Es ist kein Fehler beim Lesen der Datei aufgetreten. Die Funktion MACHWAS() wurde trotzdem nicht aufgerufen.

    Offensichtlich stimmt irgendetwas mit dem IF-Vergleich nicht. Wir schauen mit der Msgbox nach den Variablen.

    $wert = filereadline("test.txt") ;Wert aus Datei auslesen (zahl in textdatei = 100)

    msgbox(0,"wert=",$wert) ;als $wert wird 100 angezeigt, das stimmt!

    if mousegetpos() > $wert then machwas() ;wenn X-Koordinate der Mausposition>Wert dann machwas 

    Fein, die Datei "test.txt" existiert und wird gelesen, die Messagebox zeigt 100, das klappt ja schon einmal.

    Also ist irgendetwas mit dem Rückgabewert von MouseGetPos() faul, also mal in Scite den Cursor auf den Funktionsnamen setzen, F1 drücken und in der HILFE nachlesen....

    Aha, in der Hilfe erfahren wir, MouseGetPos ohne Angabe einer Dimension gibt ein ARRAY zurück.

    Rückgabewerte: $array[0] = X-Koordinate (horizontal), $array[1] = Y-Koordinate (vertikal)

    Dieses Array (und auch sonst eigentlich alle bis zu zweidimensionalen Arrays) könnte man mit _arraydisplay() ausgeben, um nachzuprüfen, ob überhaupt die "richtigen" Werte, hier die Mauskoordinaten, ausgegeben werden.

    Damit man _arraydisplay() nutzen kann, muss eine #include-Datei ins Script eingebunden werden. In den Scite-Tools sorgt OrganizeIncludes für das Einbinden der passenden Include-Datei(en)!

    $wert = filereadline("test.txt") ;Wert aus Datei auslesen (zahl in textdatei = 100)

    msgbox(0,"wert=",$wert) ;wert ausgeben, es wird 100 ausgegeben, stimmt

    $array = mousegetpos() ;Koordinaten der Mausposition in array schreiben

    _arraydisplay($array) ; zeigt die X-koordinate und Y-Koordinate der Mausposition

    Nachdem die Msgbox bestätigt wurde, erscheint ein Fenster mit der Darstellung des Arrays mit den Mauskoordinaten X und Y. Diese Koordinaten erscheinen uns richtig.

    Wir wollten die X-Koordinate der Mausposition mit dem Wert in der Datei vergleichen, also gäbe es 2 Möglichkeiten das Script zu ändern: Laut der Hilfe ist die X-Koordinate der Mausposition sowohl in $array[0], als auch in mousegetpos(0) enhalten. Wir entscheiden uns für mousegetpos(0), übergeben diese aber einer weiteren Variablen $Maus_X, denn diese Variable ist wiederum (mit unserer geliebten Msgbox^^) überprüfbar! Um mal schnell ohne Deklaration am Scriptanfang eine temporäre Variable lokal zu verwenden, nutzt man den Befehl LOCAL.

    $wert = filereadline("test.txt") ;Wert aus Datei auslesen (zahl in textdatei = 100)

    msgbox(0,$wert) ;wert ausgeben, es wird 100 ausgegeben, stimmt

    Local $Maus_X = mousegetpos(0) ;X-Koordinaten der Mausposition in Variable schreiben

    msgbox(0,"maus_x=",$Maus_X) ;msgbox mit Maus_X =576 erscheint

    if $Maus_X > $wert then machwas() ;wenn Mausposition X>Wert dann machwas 

    Hmmm, das funktioniert immer noch nicht, die Funktion MACHWAS() wird nicht aufgerufen! Die Mauskoordinate 576 ist doch größer als 100, die Messageboxen geben die Variablen doch aus, warum wird denn MACHWAS() trotzdem nicht ausgeführt?!

    Hilfe hilft...

    In der Hilfe zu FileReadLine() steht folgender Text: "Liest eine Zeile Text aus einer zuvor geöffneten Textdatei."

    Zeile Text, Zeile Text...na logo liest die Funktion eine Zeile Text! Die Msgbox zeigt, die Variable $wert hat doch den Wert 100!

    Grübel, grübel und studier.....

    AAAAAAHHHH, TEXT steht da, TEXT! Jetzt wirds langsam hell, TEXT heisst so viel wie STRING!

    Also gibt FileReadLine() einen STRING zurück, in der Variable $wert steht also ein String, in der IF-Abfrage mit der Mausposition wird aber eine Zahl(INTEGER) erwartet. Zwei unterschiedliche Datentypen vergleichen funktioniert nicht, also müssen wir aus dem STRING "100" die Zahl 100 machen:

    Die Funktion Number() hilft uns weiter und macht aus dem STRING "100" die Zahl 100.

    Ob die Datentypen nun übereinstimmen, kann man sich auch in der MsgBox anzeigen lassen! Die Funktion VarGetType() sollte man daher im Auge behalten und oft nutzen!

    $wert=filereadline("test.txt") ;Wert aus Datei auslesen (zahl in textdatei = 100)

    msgbox(0,"wert= "&$wert,vargettype(number($wert))) ;wert ausgeben, es wird 100 ausgegeben, stimmt

    Local $Maus_X=mousegetpos(0) ;X-Koordinaten der Mausposition in Variable schreiben

    msgbox(0,"maus_x= "&$Maus_X, vargettype($Maus_X)) ;msgbox mit Maus_X =576 erscheint

    if $Maus_X > number($wert) then machwas() ;wenn Mausposition X>Wert dann machwas 

    TADAAAA, die Funktion MACHWAS() wird aufgerufen, sobald die X-Koordinate der Maus die 100 übersteigt, also könnte man nun die Messageboxen entfernen (ich kommentiere sie meist nur aus, man braucht sie ggf noch einmal^^), die @error-Abfrage einfügen und das Script kürzen indem man die Hilfsvariable $Maus_X eliminiert.:$wert=filereadline("test.txt") ;Wert aus Datei auslesen (zahl in textdatei = 100)

    if @error=-1 then msgbox(0,"Fehler in filereadline()","@error="&@error) ;wenn fehler, dann msgbox

    if mousegetpos(0) > number($wert) then machwas() ;wenn Mausposition X>Wert dann machwas

    Die von mir geschätzte Zeit für diese "Problemlösung" mit den vorgestellten Methoden ist ca. 5-10 Minuten für einen Anfänger! :rofl:

    Man kann natürlich den Datentyp (VarGetType()) oder die Errorabfrage auch in die Debug-MsgBox einfügen, dazu muß man die Datei "AutoItTools.lua" bearbeiten, ab Zeile 180 gehts dort zur Sache. Wer allerdings nicht weiß was er dort macht, sollte tunlichst die Finger davon lassen.

    Vielleicht habt ihr selbst eine Idee oder ein Tool, wie man das "Fehlerfinden" vereinfachen könnte?

    Immer her damit, damit die Fehlersuche demnächst etwas flotter vor sich geht!

    Also noch einmal zusammengefasst die Vorgehensweise bei der Fehlersuche:

    - Fehlerposition mit Debug to MsgBox , Debug to Console und/oder Trace: Add Func Trace Lines eingrenzen.

    - nach Funktionsaufrufen den @error nach Möglichkeit abfangen und auswerten

    - Variablen und deren Werte mit Debug to MsgBox und Debug to Console abfragen und prüfen

    - Datentypen der Variablen mit VarGetType() prüfen

    - Arrays mit _arraydisplay() anzeigen

    - die Hilfe nutzen und auch die Beispiele dort einmal ansehen bzw ausprobieren!

    ciao

    Andy

  • RegExp Pattern???

    • Andy
    • 5. August 2009 um 12:44

    Hi,
    auf die schnelle qnd...

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <GuiListView.au3>
    $gui = GUICreate("list", 600, 400)
    $Liste = GUICtrlCreateListView("Name|Sitzung|Kennung|Status|leer|zeit", 16, 130, 601, 125)
    _GUICtrlListView_SetColumnWidth($Liste, 0, 100)
    _GUICtrlListView_SetColumnWidth($Liste, 1, 100)
    _GUICtrlListView_SetColumnWidth($Liste, 2, 50)

    [/autoit] [autoit][/autoit] [autoit]

    Local $string
    $in = FileOpen("server.txt", 0)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    _GUICtrlListView_BeginUpdate($Liste) ;liste schützen
    While 1
    $line = FileReadLine($in) ;filereadline"klaut" die @crlf am ende der zeile
    If @error = -1 Then ExitLoop
    If Not StringInStr($line, "BENUTZERNAME") Then

    $string = _ErsetzeLeerzeichenDurchPipe($line) & @CRLF
    $split = StringSplit($string, "|") ;daten in array
    $index = _GUICtrlListView_AddItem($Liste, $split[1], 0, _GUICtrlListView_GetItemCount($Liste) + 9999) ;ersten Listeneintrag schreiben
    For $subindex = 1 To 5 ;zeile mit daten auffüllen
    _GUICtrlListView_AddSubItem($Liste, $index, $split[$subindex+1], $subindex) ;Spalte mit den parametern schreiben
    Next
    EndIf
    ;if stringisspace($line)<>1 and $line<>"" then $string&=$line&@crlf ;zeile besteht nicht aus leerstring, leerzeichen oder tab oder cr oder lf....
    WEnd
    _GUICtrlListView_EndUpdate($Liste) ;liste zum bearbeiten freigeben

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While GUIGetMsg() <> -3
    WEnd
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func _ErsetzeLeerzeichenDurchPipe($zeile)
    $zeile = StringStripWS($zeile, 4) ;alle aufeinanderfolgenden leerzeichen auf eins reduzieren
    If StringLeft($zeile, 1) = " " Then $zeile = StringTrimLeft($zeile, 1) ; erstes leerzeichen löschen
    $zeile = StringReplace($zeile, " ", "|", 5) ; leerzeichen mit pipes ersetzen
    Return $zeile
    EndFunc ;==>_ErsetzeLeerzeichenDurchPipe

    [/autoit]

    ciao
    Andy

    edit: hups, verbessert^^
    2. edit: omg....

  • TCP Verbindung nur einmal möglich

    • Andy
    • 5. August 2009 um 12:04

    Hallo,
    das kommt daher, weil dein Server in der schleife mehrfach versucht , eine Socketverbindung zu einer IP herzustellen

    Spoiler anzeigen
    [autoit]

    _SQLite_Close()
    _SQLite_Shutdown ()

    [/autoit] [autoit][/autoit] [autoit]

    TCPStartup()
    $MainSocket = TCPListen(@IPAddress1, 33891, 100 )

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    while 1
    $ConnectedSocket = TCPAccept($MainSocket)
    msgbox(0,"Server empfängt",$ConnectedSocket,1)
    If $ConnectedSocket <> -1 Then ExitLoop
    Sleep(100)
    WEnd

    [/autoit]


    ciao
    Andy

  • RegExp Pattern???

    • Andy
    • 5. August 2009 um 11:01

    Hi,
    erste Zeile löschen?
    Geh mal nen Kaffee trinken^^

    Spoiler anzeigen
    [autoit]

    local $string
    $in=fileopen("server.txt",0)
    while 1
    $line=filereadline($in) ;filereadline"klaut" die @crlf am ende der zeile
    If @error = -1 Then ExitLoop
    if not stringinstr($line,"BENUTZERNAME") then $string&=_ErsetzeLeerzeichenDurchPipe($line)&@crlf
    ;if stringisspace($line)<>1 and $line<>"" then $string&=$line&@crlf ;zeile besteht nicht aus leerstring, leerzeichen oder tab oder cr oder lf....
    wend

    [/autoit] [autoit][/autoit] [autoit]

    msgbox (0,0,$string)
    filedelete("out.txt")
    $out=filewrite("out.txt",$string)
    exit

    [/autoit] [autoit][/autoit] [autoit]

    func _ErsetzeLeerzeichenDurchPipe($zeile)
    $zeile=stringstripws($zeile,4) ;alle aufeinanderfolgenden leerzeichen auf eins reduzieren
    if stringleft($zeile,1)=" " then $zeile=stringtrimleft($zeile,1) ; erstes leerzeichen löschen
    $zeile=stringreplace($zeile," ","|",5) ; leerzeichen mit pipes ersetzen
    return $zeile
    endfunc

    [/autoit]


    ciao
    Andy

  • RegExp Pattern???

    • Andy
    • 5. August 2009 um 10:47

    Hallo, hab kein regex, aber AutoIt hat da 2 Befehle für^^

    Spoiler anzeigen
    [autoit]

    local $string
    $in=fileopen("server.txt",0)
    while 1
    $line=filereadline($in) ;filereadline"klaut" die @crlf am ende der zeile
    If @error = -1 Then ExitLoop
    $string&=_ErsetzeLeerzeichenDurchPipe($line)&@crlf
    ;if stringisspace($line)<>1 and $line<>"" then $string&=$line&@crlf ;zeile besteht nicht aus leerstring, leerzeichen oder tab oder cr oder lf....
    wend

    [/autoit] [autoit][/autoit] [autoit]

    msgbox (0,0,$string)
    filedelete("out.txt")
    $out=filewrite("out.txt",$string)
    exit

    [/autoit] [autoit][/autoit] [autoit]

    func _ErsetzeLeerzeichenDurchPipe($zeile)
    $zeile=stringstripws($zeile,4) ;alle aufeinanderfolgenden leerzeichen auf eins reduzieren
    if stringleft($zeile,1)=" " then $zeile=stringtrimleft($zeile,1) ; erstes leerzeichen löschen
    $zeile=stringreplace($zeile," ","|",5) ; leerzeichen mit pipes ersetzen
    return $zeile
    endfunc

    [/autoit]


    ciao
    Andy

    Stilgar, das hatte ich auch anfangs...aber in seiner logdatei sind mehrere Leerzeichen zwischen den Strings...

    2.edit: ups, sehe gerade, Datum und Uhrzeit sollen "am Stück" bleiben, d.h. mit Leerzeichen

  • 2te Gui reagiert nicht auf Mausbefehle

    • Andy
    • 5. August 2009 um 10:20

    Hallo,
    in Zeile 50 definierst du ein label, daß "über" dem Button liegt. wenn du die msg1 mal in die console schreibst, siehst du das....warum das label aber "über" dem nachher erstellten Button liegt, weiß ich nicht^^

    [autoit]

    $Label3 = GUICtrlCreateLabel("Neuer Prozess - " & $server , 64, 8, 220, 20)

    [/autoit]

    so funktionierts...
    ciao
    Andy

  • Script friert nach einigen stunden ein ?

    • Andy
    • 4. August 2009 um 12:16

    Hallo,
    was sagt denn dein letzter LOG-Eintrag?
    Das einzige was ich mir vorstellen könnte, ist daß nslookup irgendwie im interaktiven Modus gelandet ist und somit keine Ausgabe über StdoutRead() möglich war.
    Weiterhin bekommst du keine Fehlermeldung im log, wenn der dns nicht erreichbar ist.
    ciao
    Andy

  • Auswahlfenster ertellen mittels AutoIT 3

    • Andy
    • 4. August 2009 um 09:17

    Hallo Oscar,
    genau deine "erweiterte" Fleißarbeit wollte ich eigentlich dem Threadersteller aufs Auge drücken^^
    Nur selbst fressen macht fett ;)
    ciao
    Andy

  • Taschenrechner

    • Andy
    • 3. August 2009 um 21:01
    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 311, 308, 192, 124)
    $Label1 = GUICtrlCreateLabel("", 40, 9, 228, 36)
    GUICtrlSetBkColor($Label1, 0xFFFFFF)
    GUICtrlSetFont($Label1, 21)
    $Button1 = GUICtrlCreateButton("1", 48, 80, 41, 41, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("2", 104, 80, 41, 41, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("3", 160, 80, 41, 41, $WS_GROUP)
    $Button4 = GUICtrlCreateButton("4", 48, 136, 41, 41, $WS_GROUP)
    $Button5 = GUICtrlCreateButton("5", 104, 136, 41, 41, $WS_GROUP)
    $Button6 = GUICtrlCreateButton("6", 160, 136, 41, 41, $WS_GROUP)
    $Button7 = GUICtrlCreateButton("7", 48, 192, 41, 41, $WS_GROUP)
    $Button8 = GUICtrlCreateButton("8", 104, 192, 41, 41, $WS_GROUP)
    $Button9 = GUICtrlCreateButton("9", 160, 192, 41, 41, $WS_GROUP)
    $Button10 = GUICtrlCreateButton("0", 48, 248, 41, 41, $WS_GROUP)
    $Button11 = GUICtrlCreateButton("/", 216, 80, 41, 41, $WS_GROUP)
    $Button12 = GUICtrlCreateButton("*", 216, 136, 41, 41, $WS_GROUP)
    $Button13 = GUICtrlCreateButton("-", 216, 192, 41, 41, $WS_GROUP)
    $Button14 = GUICtrlCreateButton("+", 216, 248, 41, 41, $WS_GROUP)
    $Button15 = GUICtrlCreateButton(".", 104, 248, 41, 41, $WS_GROUP)
    $Button16 = GUICtrlCreateButton("=", 160, 248, 41, 41, $WS_GROUP)
    $Button17 = GUICtrlCreateButton("C", 48, 50, 41, 20, $WS_GROUP)
    GUICtrlSetBkColor(-1, 0xFF0000)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    GUICtrlSetData($Label1, GUICtrlRead($Label1) & "1")
    Case $Button2
    GUICtrlSetData($Label1, GUICtrlRead($Label1) & "2")
    Case $Button3
    GUICtrlSetData($Label1, GUICtrlRead($Label1) & "3")
    Case $Button4
    GUICtrlSetData($Label1, GUICtrlRead($Label1) & "4")
    Case $Button5
    GUICtrlSetData($Label1, GUICtrlRead($Label1) & "5")
    Case $Button6
    GUICtrlSetData($Label1, GUICtrlRead($Label1) & "6")
    Case $Button7
    GUICtrlSetData($Label1, GUICtrlRead($Label1) & "7")
    Case $Button8
    GUICtrlSetData($Label1, GUICtrlRead($Label1) & "8")
    Case $Button9
    GUICtrlSetData($Label1, GUICtrlRead($Label1) & "9")
    Case $Button10
    GUICtrlSetData($Label1, GUICtrlRead($Label1) & "0")
    Case $Button11
    GUICtrlSetData($Label1, GUICtrlRead($Label1) & "/")
    Case $Button12
    GUICtrlSetData($Label1, GUICtrlRead($Label1) & "*")
    Case $Button13
    GUICtrlSetData($Label1, GUICtrlRead($Label1) & "-")
    Case $Button14
    GUICtrlSetData($Label1, GUICtrlRead($Label1) & "+")
    Case $Button15
    GUICtrlSetData($Label1, GUICtrlRead($Label1) & ".")
    Case $Button16
    ;~ Was muss hier rein?
    GUICtrlSetData( $label1, Execute( GUICtrlRead( $label1 ) ) )
    Case $Button17
    GUICtrlSetData($Label1, "")
    EndSwitch
    WEnd

    [/autoit]

    Ergebnis und rote (C)leartaste^^

  • Taschenrechner

    • Andy
    • 3. August 2009 um 20:43

    Hi,

    Zitat

    Da sollte aber noch ein Set taste her =)

    das verstehe ich nicht, aber eine C-Taste( in Rot^^) wäre noch schön ;)
    Andy

  • Taschenrechner

    • Andy
    • 3. August 2009 um 20:25

    Hallo,

    Zitat

    ;~ Was muss hier rein?

    [autoit]

    GUICtrlSetData( $label1, Execute( GUICtrlRead( $label1 ) ) )

    [/autoit]


    muss nicht unbedingt, aber wirft ein Ergebnis aus^^

    ciao
    Andy

  • Auswahlfenster ertellen mittels AutoIT 3

    • Andy
    • 3. August 2009 um 20:11

    Hallo,
    kleines Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('GUIOnEventMode', 1) ;eventmodus einschalten

    [/autoit] [autoit][/autoit] [autoit]

    guicreate("Programm-Installation") ;gui basteln
    guictrlcreatelabel("Bitte Programme auswählen, dann Installieren!",10,10,300,30)
    dim $check[10] ;Array für 10 checkboxen
    for $i=0 to 9 ;die checkboxen-id dem array zuweisen
    $check[$i]=GUICtrlCreateCheckbox("Programm"&$i,10,30+30*$i,150,20)
    Next
    $installbutton=guictrlcreatebutton("Installieren",200,40,80,30) ;button
    $endebutton=guictrlcreatebutton("Ende",200,90,80,30) ;button
    GUICtrlSetOnEvent($installbutton, "_install") ;wenn event "button "Installieren" gedrückt" , die funktion _install auslösen
    GUICtrlSetOnEvent($endebutton, "_ende") ; wenn event endebutton gedrückt, dan funktion _ende auslösen
    GUISetOnEvent($GUI_EVENT_CLOSE, "_ende")
    guisetstate() ; gui aktivieren

    [/autoit] [autoit][/autoit] [autoit]

    while 1 ; endlosschleife, wir warten auf die events
    sleep(100)
    wend

    [/autoit] [autoit][/autoit] [autoit]

    func _install() ;programme installieren
    for $i=0 to 9
    if guictrlread($check[$i])=$GUI_CHECKED then msgbox(0,"Installation:","Programm"&$i)
    Next
    endfunc

    [/autoit] [autoit][/autoit] [autoit]

    func _ende() ;ende
    Exit
    endfunc

    [/autoit]


    ciao
    Andy

  • µit - Juli

    • Andy
    • 2. August 2009 um 17:42
    Zitat von Andy

    und bevor ich es auch noch "vergesse", stelle ich es lieber online

    Zitat von progandy

    Du hast den Sinn nicht verstanden...

    Zitat von Oscar

    Ich habe leider den Abgabetermin etwas verschlafen

    Zitat von BugFix

    Oops, geht mir genauso

    :rofl::rofl::rofl:;)

    da bleibt mir doch nur ein 8o
    ciao
    Andy

  • While , IF Problem

    • Andy
    • 30. Juli 2009 um 17:05

    Hallo,
    in solchen Fällen hilft ein beherztes TRACE Add Tracelines in den Scite- Tools.
    Nach einem freundlichen F5 gibt dann 2 Möglichkeiten:
    1. Script hängt in einer endlosschleife fest, dann "abschiessen" und in den letzten Zeilen der Console nachschauen was los war
    2. Script hängt an einem Befehl (z.B. ping), dann steht die letzte ausgeführte Zeile auch in der Console
    ciao
    Andy

  • While , IF Problem

    • Andy
    • 30. Juli 2009 um 10:46

    Hallo,
    ELSEIF´s waren in deinem Script nicht nötig.

    Spoiler anzeigen
    [autoit]

    Local $line
    Dim $ListViewText[2] = [1, "HOST"]

    [/autoit] [autoit][/autoit] [autoit]

    ;
    While 1
    If FileExists('\\server\share\' & $ListViewText[1] & '.log') Then
    $line = FileRead('\\server\share\' & $ListViewText[1] & '.log')
    If StringInStr($line, "Flag") Then
    MsgBox(0, "", "String in Log vorhanden")
    Else
    MsgBox(0, "", "String in Swscan nicht vorhanden")
    ExitLoop
    EndIf
    Else
    Ping($ListViewText[1], 1) ; Host anpingen
    If @error Then
    MsgBox(0, 0, "Ping auf " & $ListViewText[1] & " nicht erfolgreich!")
    ExitLoop
    Else
    RegRead("\\" & $ListViewText[1] & "\HKEY_LOCAL_MACHINE\SOFTWARE\xxx\Flag", "ProductName")
    If @error = 0 Then
    MsgBox(0, "", "Flag eintrag x32 vorhanden")
    ExitLoop
    Else
    RegRead("\\" & $ListViewText[1] & "\HKEY_LOCAL_MACHINE\SOFTWARE\WoW64\xxx\Flag", "ProductName")
    If @error = 0 Then
    MsgBox(0, "", "Flag eintrag x64 vorhanden")
    ExitLoop
    EndIf
    EndIf
    EndIf
    EndIf
    WEnd

    [/autoit]


    Es ist generell in solchen Fällen sinnvoll, sich mit einigen Strichen einen kurzen Ablaufplan aufzuzeichnen bzw. mit eigenen Worten aufzuschreiben, und diesen dann GENAU so umzusetzen^^
    Also:

    Code
    Endlosschleife:
    Wenn file existiert, dann 
          lies das File und reagiere auf inhalt
    ansonsten
        pinge Rechner an
        Wenn fehler beim ping, dann
           Nachricht und raus aus der endlosschleife
        ansonsten
          Registry lesen 32 bit
         Wenn Registry 32 bit dann 
           nachricht 32 bit und raus aus der endlosschleife
         ansonsten
           registry lesen 64 bit
          Wenn Registry 64 bit dann 
           nachricht 64 bit und raus aus der endlosschleife
    Endlosschleife LOOP
    Alles anzeigen

    ciao
    Andy

    ps: Wenn du mit Scite arbeitest, zwischendurch ab und zu mal CTRL+t drücken oder bei Tools den Tidy anwerfen....

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™