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

Beiträge von TimBlo

  • Eigene HTTP Class (Brauche Hilfe bei socket)

    • TimBlo
    • 17. Januar 2013 um 11:22

    Hi

    Ich komme mit dem socket Modul von Python noch nicht klar, und obendrauf weiss ich nicht, womit die Rote linie (Der kommentar) zu ersetzen ist.
    Also eins nach dem anderen. Ich habe die Befehle so aneinander gereiht wie sie meiner meinung nach sollten.
    Sinn ist es, nach dem Befehl zu senden, zu versuchen eine Verbindung aufzubauen und zwar in der Non-Blocking mode.
    Mit der Funktion StatusUpdate() soll dann weiter versucht werden das Request zu senden und die Antwort einzuholen.

    In RFC 2616 ist alles genau beschrieben, damit bekomm ichs hin... hätte vorher draufkommen sollen ^^
    das HTTP Protokoll enthält 5 regeln zum erkennen der Nachrichtenlänge und somit zum erkennen des endes der nachricht.
    ich bin jetzt hoffentlich auf einem guten weg ;)

    Beim letzten Versuch in der IDLE habe ich ein Request erstellt und an Google geschickt, nach unendlich StatusUpdate() wars mit RequestState immernoch "Connecting"

  • StringRegExp Problem

    • TimBlo
    • 1. Juli 2012 um 20:58

    Wenn du auf geschwindigkeit setzst, dann nimm nicht RegExp ;)
    sry, aber is so ;)
    StringInStr()
    StringLeft()
    StringTrimLeft()
    STringRight()
    StringTrimRight()
    StringMid()
    das sind die wichtigsten funktionen um schnell zu informationen zu kommen ;)

  • Dateien und Ordner/Dateien rekursive auflisten

    • TimBlo
    • 23. Januar 2012 um 21:32
    Zitat

    Kannst mir dies mal bitte als Beispiel mit einem Ordner machen? Ich verstehe nicht ganz, wofür dieses $ary und $mask sein soll


    $ary und $ar0 sind nur zwischenspeicher.
    $mask filtert das ganze noch. kannste "*" rein packen dann kommt alles raus.

  • Dateien und Ordner/Dateien rekursive auflisten

    • TimBlo
    • 23. Januar 2012 um 21:00

    selfmade und schon für tausende daten verwendet worden:

    [autoit]

    #include <File.au3>
    #include-once
    ;This function uses recursion, but there is no risk.
    Func FileCollect($path, $mask)
    Global $filecollectar[1]
    $filecollectar[0] = 0
    $filecollectar = FileCollectFolders($filecollectar, $path, $mask)
    Return $filecollectar
    EndFunc
    Func FileCollectFolders($ary, $path, $mask)
    $ar0 = _FileListToArray($path, "*", 2)
    If not @error Then
    For $c = 1 To $ar0[0]
    $ary = FileCollectFolders($ary, $path&"/"&$ar0[$c], $mask)
    Next
    EndIf
    $ar0 = _FileListToArray($path, $mask, 1)
    If Not @error Then
    ReDim $ary[$ary[0]+$ar0[0]+1]
    For $c = 1 To $ar0[0]
    $ary[$ary[0]+$c] = $path&"/"&$ar0[$c]
    Next
    $ary[0] += $ar0[0]
    EndIf
    Return $ary
    EndFunc

    [/autoit]


    die differenz zu dem was du willst ist, das hier gibt ein array, du musst
    For $c = 0 To $array[0]
    Filewrite("output.txt", $array[$c]&@CRLF)
    Next
    machen. in etwa ^^

  • HTTP proxie empfängt nur teilantworten (hart)

    • TimBlo
    • 27. Juni 2011 um 02:50

    jojo.

    der titel sagt alles.
    ich weiss nicht was an meinem Code noch alles so falsch ist, aber er empfängt definitivimus nur teilantworten.
    ich dachte ich hätte es grad noch gefixt gehabt... ääääh kp was ich genau gemacht hab.
    vllt bin ich ein bissel noob, aber kann mir trotzdem einer erklären wies besser funktionieren würde ^^

    Spoiler anzeigen


    also mal so das junge programm:

    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=..\Proxy.exe
    #AutoIt3Wrapper_UseX64=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    Global $listen
    Global $conns[130][3] ; local, wan, seed

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

    TCPStartup()
    $listen = TCPListen("127.0.0.1", 45000, 134)

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

    While True
    Sleep(50)
    CreateConn()
    For $c = 1 To $conns[0][0]
    ;Von clienten daten
    $reqData = TCPRecv($conns[$c][0], 4096, 1)
    If @error Then
    ConnDelete($c, "Client verloren")
    ExitLoop
    EndIf
    If $reqData <> "" Then
    Connect($c, $reqData)
    EndIf
    ;Vom server daten
    $resData = TCPRecv($conns[$c][1], 4096, 1)
    $error = @error
    If $resData <> "" Then
    Recive($c, $resData)
    EndIf
    If $error Then
    ConnDelete($c, "Server verloren")
    ExitLoop
    EndIf
    Next
    WEnd

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

    Func CreateConn()
    $socken = TCPAccept($listen)
    If $socken < 1 Then Return 0
    $conns[0][0] += 1
    $conns[$conns[0][0]][0] = $socken
    $conns[$conns[0][0]][1] = 0
    $conns[$conns[0][0]][2] = ""
    EndFunc
    Func Connect($c, $data)
    ;get data
    $add = "0x"
    Do
    $data &= StringTrimLeft($add, 2)
    $add = TCPRecv($conns[$c][0], 4096, 1)
    Until $add = ""
    $pos = StringInStr($data, "486F73743A20", 2)+12
    $host="0x"&StringMid($data, $pos, 2)
    Do
    $pos+=2
    $host&=StringMid($data, $pos, 2)
    Until StringMid($data, $pos+2, 4)="0D0A"
    $hostname = BinaryToString($host)
    ;check port
    $pos = StringInStr($hostname, ":", 2)
    If $pos <> 0 Then
    $hostn = StringLeft($hostname, $pos)
    $port = StringTrimLeft($hostname, $pos+1)
    else
    $hostn = $hostname
    $port = 80
    EndIf
    ;connect
    If $conns[$c][2] <> $hostname Then
    $conns[$c][2] = $hostname
    TCPCloseSocket($conns[$c][1])
    $conns[$c][1] = TCPConnect(TCPNameToIP($hostn), $port)
    If @error Then
    Return
    EndIf
    EndIf
    TCPSend($conns[$c][1], $data)
    If @error Then
    TCPCloseSocket($conns[$c][1])
    $pos = StringInStr($conns[$c][2], ":", 2)
    If $pos <> 0 Then
    $hostn = StringLeft($hostname, $pos)
    $port = StringTrimLeft($hostname, $pos+1)
    else
    $hostn = $hostname
    $port = 80
    EndIf
    $conns[$c][1] = TCPConnect(TCPNameToIP($hostn), $port)
    If @error Then
    Return
    EndIf
    EndIf
    TCPSend($conns[$c][1], $data)
    EndFunc
    Func Recive($c, $data);THIS FUNCTION IS MUCH SLOWER THAN POSSIBLE & DOESNT RECIVE ALL DATA
    ;get data
    $add = "0x"
    Do
    Sleep(1000)
    $data &= StringTrimLeft($add, 2)
    $add = TCPRecv($conns[$c][1], 4096*4096, 1)
    Until $add = ""
    TCPSend($conns[$c][0], $data);bypass
    EndFunc
    Func ConnDelete($c, $r)
    TCPCloseSocket($conns[$c][0])
    TCPCloseSocket($conns[$c][1])
    $conns[$c][0] = $conns[$conns[0][0]][0]
    $conns[$c][1] = $conns[$conns[0][0]][1]
    $conns[$c][2] = $conns[$conns[0][0]][2]
    $conns[0][0] -= 1
    EndFunc

    [/autoit]

    wenn ich was vergesse kommt das heut mittag oder so, ich geh :sleeping:

  • Code effizienter gestalten

    • TimBlo
    • 24. Mai 2011 um 18:20

    hmmm. ich weiss leider auch nicht genau wie AutoIt funktioniert aber ich bin besorgt, weil ich gerade feststelle dass er für die letzten 2 dateien etwa 70 Minuten brauchte.
    das wären 171KB oder sowas...
    ich weiss nicht recht, aber ich glaube ich geb euch mal meine UDF für das interface und dann stelle ich die source rein.
    ich wills aber erst noch ausbessern. der UDF fehlt noch der letzte schliff. am donnerstag werde ich womöglich nochmals tiefer darauf eingehen.

    das programm welches ich habe verarbeitet einfach massenweise daten. in meinem fall grade 278MB aber gibt noch mehr daten dieser art.
    ich habe einfach alle files in ein array als warteschlange gestellt und lass jede datei durchlaufen...

    die funktionen von euch sind aber super ^^ als ich meine geschrieben habe, dachte ich, ich bräuchte am ende das array noch. tja. so kanns gehen.

  • Code effizienter gestalten

    • TimBlo
    • 23. Mai 2011 um 17:50
    Zitat von AspirinJunkie


    Eigentlich klingt das ja eindeutig aber wenn ich deine Funktion mal mit folgendem Array teste:

    [autoit]

    Global $a_Test[10] = ["a", "v", "c", "x", "v", "c", "h", "c", "a", "a"]

    [/autoit]

    Kommt als Ergebnis "v" heraus mit der Anzahl 1 (obwohl es ja 2x vorkommt).

    Ja, sry ^^
    für mich ist es standard dass ich arrays mit indexen erstelle, so kann es nicht passieren dass man mit ReDim plötzlich ein leeres array $ar[0][2] oder sowas erstellt.
    du hast mir nen echten schock eingejagt weil ich grad dachte das programm läuft jetzt fehlerhaft ^^
    warum es keinen fehler ausgibt wenn man keinen index anbaut ist.... hab ich nich untersucht ^^ so gehts doch:

    Spoiler anzeigen
    [autoit]

    Global $a_Test[11] = [10, "a", "v", "c", "x", "v", "c", "h", "c", "a", "a"]
    $ret = ArrayCountS($a_Test)
    MsgBox(0, @extended, $ret&@CRLF&@error)
    Func ArrayCountS($array)
    Dim $ary[2][2]
    $ary[0][0] = 1
    $ary[1][0] = $array[1]
    $ary[1][1] = 1
    $best = $array[1]
    $cbest = 1
    $dublic = 0
    For $c = 2 To $array[0]
    For $i = 1 To $ary[0][0]
    If $ary[$i][0] = $array[$c] Then
    $ary[$i][1] += 1
    If $ary[$i][1] > $cbest Then
    $dublic = 0
    $best = $array[$c]
    $cbest = $ary[$i][1]
    ContinueLoop 2
    ElseIf $ary[$i][1] < $cbest Then
    ContinueLoop 2
    EndIf
    $dublic = 1
    ContinueLoop 2
    EndIf
    Next
    $ary[0][0] += 1
    ReDim $ary[$ary[0][0]+1][2]
    $ary[$ary[0][0]][0] = $array[$c]
    $ary[$ary[0][0]][0] = 1
    Next
    Return SetError($dublic, $cbest, $best)
    EndFunc

    [/autoit]
    Zitat von AspirinJunkie

    So wie ich dich verstanden habe sollte aber entweder "a" oder "c" herauskommen - jeweils mit dem Vorkommen 3 - oder?

    Jawohl. Ich sags mal so. Im test funktioniert es. aber scheinbar sagt er mir grad nicht dass noch etwas anderes(-> "c") 3mal vorkommt :(

    die frage gilt aber vorwiegend wirklich der geschwindigkeit. für 1.3 MB braucht er schon einige minuten.
    ich kann sonst einmal eine "testumgebung" machen die beide methoden vergleicht.

  • Code effizienter gestalten

    • TimBlo
    • 23. Mai 2011 um 13:21

    ich verstehe nicht genau was du meinst.

    gerade habe ich z.B 1.3MB 64er Strings in nem array das macht mehr als 43'000 elemente für das Array. allein dadurch wird es langsam. die funktion geht eig noch, nur dass die halt dieselbe menge an daten verarbeiten muss und wenn jeder string anders ist, dann geht das gut ewig.

    ich muss jetzt weg. schaue später nochmal. aber danke soweit.

  • Code effizienter gestalten

    • TimBlo
    • 23. Mai 2011 um 12:29

    Hi

    ich hab mal wieder ein problemlein wo ihr mir womöglich helfen könnt.
    es geht darum, dass folgende funktion bei mehr als einem megabyte ziemlich ewig warten lässt.

    [autoit]

    Func ArrayCountS($array)
    Dim $ary[2][2]
    $ary[0][0] = 1
    $ary[1][0] = $array[1]
    $ary[1][1] = 1
    $best = $array[1]
    $cbest = 1
    $dublic = 0
    For $c = 2 To $array[0]
    For $i = 1 To $ary[0][0]
    If $ary[$i][0] = $array[$c] Then
    $ary[$i][1] += 1
    If $ary[$i][1] > $cbest Then
    $dublic = 0
    $best = $array[$c]
    $cbest = $ary[$i][1]
    ElseIf $ary[$i][1] = $cbest Then
    $dublic = 1
    EndIf
    ContinueLoop 2
    EndIf
    Next
    $ary[0][0] += 1
    ReDim $ary[$ary[0][0]+1][2]
    $ary[$ary[0][0]][0] = $array[$c]
    $ary[$ary[0][0]][0] = 1
    Next
    Return SetError($dublic, $cbest, $best)
    EndFunc

    [/autoit]

    Wie der name sagt, soll sie die teile in dem array zählen. rückgabewert ist dann das element im array, welches am oftesten vorkommt. als @extended sagt es, wie oft es vorkam und @error sagt ob ein anderes element genau gleich oft kam.

    das problem ist eben einfach die dauer bis es das jeweilige element gefunde hat. kennt dazu jemand eine lösung die möglichst doppelt so schnell ist?
    womöglich geht es kaum schneller, aber wäre schon praktisch ^^

    EDIT:
    Ich habe die geschwindigkeiten eurer Funktionen verglichen
    AspirinJunkie's Funktion war im Test mit 512kB Daten die Schnellste. (Test mit 40k Elementen)
    Die langsamste Funktion war meine mit beträchtlichem rückstand.
    Die Ergebnisse (Ausgabe des UIs von meiner UDF TimBug. Die werd ich wenn möglich mal auf meine webseite posten ^^)

    Code
    TimBug v1.0 by TimBlo
    
    
     INFORMATION  Dieses Programm testet die geschwindigkeit ihrer Funktionen.
    
    
     -Funktion 1  Dauer: 21m 47.4s Geschwindigkeit: 0.39kB/s (Original) (2D Array)
     -Funktion 2  Dauer: 2.6s      Geschwindigkeit: 195.83kB/s (by ProgAndy)
     -Funktion 3  Dauer: 0.3s      Geschwindigkeit: 1559.55kB/s (by ProgAndy) (2D Array)
     -Funktion 4  Dauer: 0.3s      Geschwindigkeit: 1883.5kB/s (by AspirinJunkie) (2D Array)
    
    
    20:03 Testprogramm beendet
    20:03 Test Funktion 4 Abgeschlossen. 0.3s   1883.5kB/s
    20:03 Test Funktion 3 Abgeschlossen. 0.3s   1559.55kB/s
    20:03 Test Funktion 2 Abgeschlossen. 2.6s    195.83kB/s
    20:03 Test Funktion 1 Abgeschlossen. 21m 47.4s 0.39kB/s
    19:41 Testprogramm eingeleitet
    19:41 Testprogramm gestartet
    
    
    TimBug v1.0 by TimBlo
    Alles anzeigen

    Ich denke die ergebnisse (erstaunlich) stimmen so. wenn ich was falsch gemacht habe, wirds sich schon bemerkbar machen :)
    Danke an ProgAndy und AspirinJunkie.

  • Hex Strings schneller bearbeiten

    • TimBlo
    • 11. April 2011 um 11:15

    okay, wie müsste folgendes aussehen, wenn der Binary Mode nicht verwendet wird? (nicht das du mir das neu schreiben musst, aber wenn du mir iwie ein par tipps hast)

    [autoit]

    $pattern = "73656C65637400000000[0-9A-F]{2}000000[0-9A-F]{2}00000000000000(?:0000(?:[1-9A-F]{2}|[1-9A-F]0|0[1-9A-F])0\d0000|[0-9A-F][0-9A-F]00736F756E645F6B6579203[0-9](?:[1-9A-F]{2}|[1-9A-F]0|0[1-9A-F])0\d0000)*"
    $founds = StringRegExp($FileSource, $pattern, 3)

    [/autoit]


    für die variable $FileSource kannst du inen inhalt einer datei nehmen...
    das beispiel soll halt betimmte bytes finden und wenn ich nicht weiss wie man in einem normalen string ein zeichen mit dem null wert findet, dann wärs ma zeit es zu lernen.

    für den vorgang brauche ich diese funktionen : StringReplace, StringRegExpReplace und StringRegExp
    wenn es mit diesen geht, wirds mit StringLeft usw. auch gehen...

    ich glaube jetzt sind wir dem ziel doch näher gekommen ;)

  • Hex Strings schneller bearbeiten

    • TimBlo
    • 10. April 2011 um 19:16
    Zitat von Andy

    :rofl::rofl::rofl: du liest eine Datei falsch aus, und gibst dem Programm die Schuld an deiner Unfähigkeit....

    Manche leute sind auch unfähig im lesen oder?
    ich habe bereits gesagt, dass es funktioniert, aber da du wohl nichtmal ein par sätze "geschreibsel" richtig interpretierst, kann alles seinen sinn verlieren.

    progandy hat längst verstanden worum es geht.
    so wie autoit binärdaten verarbeitet ist es langsam!
    und sorry dass ich mir nicht die mühe mache shift zu drücken wenn ich auf einer uralten PS2 Tastatur mit scheizer tastaturlayout und deutschem PC schreibe, die tasten sind beinahe schon richtig verklemmt -.-

    also es gibt kein BinaryRegExp oder BinaryReplace und damit wäre der fall schon klar. war ja nich so schwer oder?

  • Hex Strings schneller bearbeiten

    • TimBlo
    • 10. April 2011 um 18:04

    ich stelle meine fragen in etwa immer so.
    seid ihr euch eig gewohnt von mir - was auch immer das für gründe haben mag :D

    ausserdem weiss ich nicht wieviel mehr der Code bringen würde...
    es geht nur darum bei StringReplace das vergleichen nur alle 2 zeichen zu machen, da ein byte im binärstring 2 zeichen benötigt
    das is jetz eig unkompliziert ausgedrückt :D

    der code, den ich zurzeit bearbeite funktioniert schon, hat eigentlich auch nicht viel mit der frage zu tun...

  • Hex Strings schneller bearbeiten

    • TimBlo
    • 10. April 2011 um 17:33

    memememe ^^

    das sind normale dateien, keine textdaten :D
    also sind daten die man mitm editor zb. nicht bearbeiten kann ^^

    wenn ich auslese habe ich dann ja nen "0x..." string ^^
    mache beim lesen&schreiben einfach binarymode. ich habe ja haufenweise nicht druckbare zeichen ^^

    auf jeden fall gehts bei autoit ewig, möchte das wenn möglich schneller haben.
    da is mir eben aufgefallen dass nur 2 zeichen aus dem hex-string ein byte geben, aber autoit weiss das doch nicht und kombiniert daher eig jedes zweite mal halbe bytes..

  • Hex Strings schneller bearbeiten

    • TimBlo
    • 10. April 2011 um 16:46

    Hi

    ich habe nur ein kleines problem, aber es ist möglich dass es keine lösung gibt ^^

    ich habe einen String wo der inhalt einer datei drin ist, und das halt in Hexzeichen.
    also immer 2 zeichen gehören zusammen.
    an diesem string will ich herumbasteln, aber das dauert mit AutoIt im bereich von Megabyten schon sehr lange.
    normalerweise werden strings bei StringRegExp, StringRegExpReplace und StringReplace immer ein zeichen nach dem anderen verarbeitet.
    aber dabei werden ja halbe Bytes überprüft, und das ist, finde ich, schon ein schrecklicher gedanke.
    gibt es iirgend nen ausweg?

  • MineCraft ServerInterface

    • TimBlo
    • 8. Februar 2011 um 23:37

    Der Server lief schon, ich wollte nur die sache demonstrieren!

    Ich habe ungefähr viel erfahrung mit bukkit :D
    Auf dem Server sind durchschnittlich 6 Spieler, und ich schlag mich dann immer mit der Konsole rum um alles schön am laufen zu haben.
    Vielleicht bin ich nicht der Top von allen Server besitzern, aber erfahrung hab ich sicher und so wies aussieht genügts um einen server "normal" zu hosten.

    Die user helfen sich halt selber und so kommt es ständig zu einem durcheinander, ich versuche mit meinen kleinen mühen alles ordentlich zu halten.
    --> aufm ersten Bukkit Server hatte ich netmal ein plugin und der machte schon fehler.
    Das ist auch nix schwerwiegendes, eher so "exceptions" wie der name schon sagt.

    Mit servern allgemein kenn ich mich schon aus, daher war es ein leichtes den server zu erstellen.
    und du hast deine aussage beinahe selber gemäht, du hast interresse am projekt (autoit) und sagst hastn Debian Root :D
    willst du etwa mit Wine Spielen? lol

    Also ich sage mal, das Makro für den Server bekomm ich locker zum laufen:
    -> anzeige einiger Infos wenn ein user einloggt
    -> anzeige ob ein user spielabsturz hatte oder disconnected hat.
    -> anzeige ob jemand gestorben ist.
    -> anzeige wer alles on ist
    -> anzeige eines geplanten serverneustarts mit countdown
    -> eigende Gruppenmanage funktion. (für das plugin GroupUser)
    -> eigene Votemaps
    -> automatische aktualisierung der website.
    -> funktionen wie spieler zeitweise bannen.

    ich denke ich habe mich zusammengefasst :D

    Das problem war nur die konsole, problem gelöst.
    ente gut, alles gut :D

    aber danke nochmal ^^

    ------------------------------ EDIT heute 10.2.11 --------------
    Der Server spukt nun keine fehler mehr aus =)
    Ich habe nun die 64bit version von Java und kann dem Server mehr als 2 gigs geben.
    Daher werde ich mir auch neue Rahm kaufen :)
    also damit ir wisst was mit 2 gigs gemeint ist ^^

    Die speicherdatei des Spiels : 20 MB
    Die Serverspeicherauslastung: 2+ gig
    fail :D

  • MineCraft ServerInterface

    • TimBlo
    • 8. Februar 2011 um 16:37

    okay, danke.

    Ich geh über die Logfiles, hoffe auf zuverlässigkeit.
    und die befehle sollte ich an die konsole schicken können.

    ich denke wirklich dass java etwas locker programmiert ist (abgesehen davon dass es noch in Beta ist), denn es spuckt jedes mal wenn ein client die verbindung abbricht nen fehler raus.
    Aber so wirds hoffentlich gehen.

  • MineCraft ServerInterface

    • TimBlo
    • 8. Februar 2011 um 15:07

    eigentlich habe ich genau das programmiert..?
    kanns an java liegen?

    also der ganze text landet ja in SciTe..

    oder wenn ich einfach das win-cmd fenster lesen könnte, also was drin steht, aber ich glaub das geht auch net so gut?

    irgendwas mache ich garantiert beim auslesen falsch denn das kommt alles problemlos in die SciTe konsolenanzeige rüber

    bei deinem codebeispiel landet das nicht in der konsolenanzeige :S
    und da klappts auch. omg ich hab so kein plan :(

  • MineCraft ServerInterface

    • TimBlo
    • 8. Februar 2011 um 14:14

    Also, Ich brauche eig umbedingt diesen STD OUT, und der sollte sich iwie haben können

    Am server ist alles Bestens, er ist im inet und läuft sauber und den ganzen tag mit bis zu 10 spielern lagfrei, weiter ist ungetestet.
    Zombiemode laggt halt mal.

    Klar - Win7 64 bla bla.

    Was möglich ist weiss ich ja schon,

    aber schaut euch mal im post oben den code zu unterst an, da schickt java weiter ne fehler info die kommt eigentlich nicht.
    Ist mir halt nicht aufgefallen weil die normalerweise nicht kommt.
    //Edit: das war weil bei opt flaf 0x2 drin hatte sry. das problem muss anders sein.

    Die eigentliche frage ist immernoch wie ich an das komme was im Konsolenfenster steht

    iwie wird das doch zu schaffen sein.
    Omg wenn ich bei Google STD Tutorial Autoit eingeb dann kommt er mit stunden und standard -.-

  • MineCraft ServerInterface

    • TimBlo
    • 8. Februar 2011 um 13:15

    moin moin

    jaja ich bin ein inaktiver user geworden.
    aber ich brauch auch mal help und ich hab mich auch schon näher mit Foren angefreundet, anstatt immer Chats zu verwenden...

    Bevor ich jetzt also komplett ins gras Beisse frag ich mal euch, denn ich mache alles komplett falsch abgesehen der ersten zeile..
    Ich kann einfach den fehler nicht orten, also erkläre ich mal worum es geht

    Ick bin glückliker besitzer eines MinecraftServers. Ein Teilnehmer hat mir nun einen neuen Server mit Plugins und solchem zeug zusammen gebastelt, weil ich mit Plugins nur Stress bekomme.
    Ich bin aber glücklicher AutoIt bastler und um die Administration zu halten, wollte ich ein makro dazu schreiben, ein Server Interface um genau zu sein.

    Dieses Interface soll dinge wie VoteMaps über den Chat hosten können.
    Und es soll die User auf die regeln aufmerksam machen und hallo User sagen usw..

    Der Server wird mit folgenden Kommandos gestartet:

    Code
    "%ProgramFiles(x86)%\Java\jre1.6.0_07\bin\java.exe" -Xms1512M -Xmx1512M -jar craftbukkit.jar


    Es ist ein bukkit server, daher der name... genaus darüber weiss ich nicht, aber bukkit hab isch schon mal selber zum laufen gebracht.
    allerdings war ich so bequem den server von minecraft.net zu nehmen damit die lows nich cheaten.

    Dieser server gibet nun solche ConsoleWrite daten zurück.
    Ich will den Server über AutoIt starten können und diese Konsolen Infos haben.
    Besser wäre noch wenn ich das Makro so OnTheFly am server anbringen könnte.

    Die Konsole sieht so aus:

    Spoiler anzeigen

    [Blockierte Grafik: http://www7.pic-upload.de/08.02.11/em3owxqe5ceq.png]


    Dies spuckt also auch mal Java Fehler aus, aber ich kann die mit Regex schon erkennen.

    Ich müsste dann halt auch Kommandos geben können, sonst kann das makro den usern ja nich hallo sagen.
    aber die kann ich notfalls auch mit ControlSend machen glaube ich ...

    und ääh ja was muss ich noch sagen?

    genau. zum code:

    [autoit]

    $PID = Run("C:\Program Files (x86)\Java\jre1.6.0_07\bin\java.exe -Xms1512M -Xmx1512M -jar craftbukkit.jar", "D:\Programme(x86)\MINECRAFT\GAMMA SERVER", @SW_MINIMIZE, 0x2)
    Sleep(400)
    $stream = StdoutRead($PID)
    If @error Then
    MsgBox(48, "Server Console error", @error&" Server fehler")
    Exit
    EndIf
    While True
    $stream &= StdoutRead($PID)
    ClipPut($stream)
    WEnd

    [/autoit]


    Die erste zeile klappt, dann kommt die ganze konsole sozusagen in SciTe's Konsolenanzeige:

    Code
    >"C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "D:\Programme(x86)\MINECRAFT\GAMMA SERVER\ServerControl.au3" /autoit3dir "C:\Program Files (x86)\AutoIt3" /UserParams    
    +>13:14:47 Starting AutoIt3Wrapper v.2.0.1.24    Environment(Language:0409  Keyboard:00000407  OS:WIN_7/  CPU:X64 OS:X64)
    >Running AU3Check (1.54.19.0)  from:C:\Program Files (x86)\AutoIt3
    +>13:14:47 AU3Check ended.rc:0
    >Running:(3.3.6.1):C:\Program Files (x86)\AutoIt3\autoit3_x64.exe "D:\Programme(x86)\MINECRAFT\GAMMA SERVER\ServerControl.au3"    
    java.io.IOException: Das Handle ist ungültig
    	at java.io.FileInputStream.readBytes(Native Method)
    	at java.io.FileInputStream.read(Unknown Source)
    	at java.io.BufferedInputStream.read1(Unknown Source)
    	at java.io.BufferedInputStream.read(Unknown Source)
    	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
    	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
    	at sun.nio.cs.StreamDecoder.read(Unknown Source)
    	at java.io.InputStreamReader.read(Unknown Source)
    	at java.io.BufferedReader.fill(Unknown Source)
    	at java.io.BufferedReader.readLine(Unknown Source)
    	at java.io.BufferedReader.readLine(Unknown Source)
    	at net.minecraft.server.ThreadCommandReader.run(SourceFile:87)
    2011-02-08 13:14:48 [INFO] Starting minecraft server version Beta 1.2_01
    2011-02-08 13:14:48 [INFO] Loading properties
    2011-02-08 13:14:48 [INFO] Starting Minecraft server on 192.168.1.6:25565
    2011-02-08 13:14:48 [WARNING] **** FAILED TO BIND TO PORT!
    2011-02-08 13:14:48 [WARNING] The exception was: java.net.BindException: Address already in use: JVM_Bind
    2011-02-08 13:14:48 [WARNING] Perhaps a server is already running on that port?
    +>13:14:54 AutoIT3.exe ended.rc:0
    >Exit code: 0    Time: 6.898
    Alles anzeigen
  • Desktophilfs & Verschönerungs -Programme

    • TimBlo
    • 28. November 2010 um 21:50

    Tja, heute hatte ich langweilig. ^^

    Programm 1: WiMa
    Mit diesem Progrämmchen könnt ihr überflüssige Fenster einfach ausblenden wenn ihr es aktiviert und Strg & Umschalt & Leer drückt.
    Um es wieder hervor zu holen drückt ihr dann Strg & Umschalt & s solange bis es kommt, die fenster werden der Reihe nach angezeigt und gleich aktiviert.
    Wenn ihr möchtet dass das fenster beim nächsten Strg & Umschalt & s nichtmehr verschwindet, dann aktiviert ihr das fenster und drückt Strg & Umschalt & d.
    Fazit: Für mich ist es wunderbar (iTunes anwerfen und weg damit von der Taskliste :D)

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Compression=0
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_UseX64=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    TraySetIcon("shell32.dll", -277)
    HotKeySet("^+{SPACE}", "hidelist")
    HotKeySet("^+s", "showhidden")
    HotKeySet("^+d", "delhidden")
    Opt("TrayAutoPause", 0)
    Global $hidden[1]
    $hidden[0] = 0
    $showpos= 1
    $B_BLOCK = TrayCreateItem("Fenster blocken")
    While True
    If TrayGetMsg() = $B_BLOCK Then Blockfunc()
    WEnd
    Func hidelist()
    If WinGetTitle("[ACTIVE]") = "" Then Return 0
    For $c = 1 To $hidden[0]
    If $hidden[$c] = WinGetHandle("[ACTIVE]") Then
    WinSetState($hidden[$c], "", @SW_HIDE)
    Return 0
    EndIf
    Next
    $hidden[0]+=1
    ReDim $hidden[$hidden[0]+1]
    $hidden[$hidden[0]] = WinGetHandle("[ACTIVE]")
    WinSetState($hidden[$hidden[0]], "", @SW_HIDE)
    EndFunc
    Func showhidden()
    If $hidden[0] = 0 Then Return 0
    $showpos += 1
    If $showpos > $hidden[0] Then $showpos = 1
    WinSetState($hidden[$showpos], "", @SW_SHOW)
    WinActivate($hidden[$showpos])
    hidelast()
    EndFunc
    Func hidelast()
    If $hidden[0] = 1 Then Return 0
    $temp = $showpos-1
    If $temp < 1 Then $temp = $hidden[0]
    WinSetState($hidden[$temp], "", @SW_HIDE)
    EndFunc
    Func delhidden()
    For $c = 1 To $hidden[0]
    If $hidden[$c] = WinGetHandle("[ACTIVE]") Then
    $hidden[$c] = $hidden[$hidden[0]]
    $hidden[0] -= 1
    ReDim $hidden[$hidden[0]+1]
    Return 0
    EndIf
    Next
    EndFunc
    Func Blockfunc()
    $str = InputBox("Fenster vor Transparenz schützen", "Geben Sie den Fenstertitel ein")
    If $str = "" Then Return 0
    IniWrite(@UserProfileDir&"\desing.ini", $str, "block", "yes")
    EndFunc

    [/autoit]


    Programm 2: Starter
    Um dieses Programm zu nutzen solltet ihr die Sourcen etwas umschreiben. Zurzeit bildet es nur HotKeys zu 3 verschiedenen Ordnern und blendet diese wieder aus wenn sie inaktiv werden.
    Fazit: Mein Desktop is leer (UIIII Schöne&Coole Wallpapers :D )

    Spoiler anzeigen
    [autoit]

    HotKeySet("^!y", "programming")
    HotKeySet("^!x", "archive")
    HotKeySet("^!c", "games")
    TraySetIcon("shell32.dll", -160)
    Opt("TrayAutoPause", 0)
    Opt("WinTitleMatchMode", 3)
    While True
    Sleep(124)
    WEnd
    Func programming()
    ShellExecute("D:\Administrator\Starting\Programming")
    $h = WinWaitActive("Programming")
    WinWaitNotActive($h)
    If WinGetTitle($h) = "Programming" Then WinClose($h)
    EndFunc
    Func archive()
    ShellExecute("D:\Administrator\Starting\Archiv")
    $h = WinWaitActive("Archiv")
    WinWaitNotActive($h)
    If WinGetTitle($h) = "Archiv" Then WinClose($h)
    EndFunc
    Func games()
    ShellExecute("D:\Administrator\Starting\Games")
    $h = WinWaitActive("Games")
    WinWaitNotActive($h)
    If WinGetTitle($h) = "Games" Then WinClose($h)
    EndFunc

    [/autoit]


    Programm 5 ääh 3: Transparency
    Dieses Programm ist nur dazu da, die Fenster auf eurem Desktop transparent zu machen. Damit man den Inhalt in praktisch allen Fällen noch lesen kann, wird das aktive Fenster mit weniger Transparenz dargestellt.
    Ausserdem beinhaltet WiMa eine Funktion, die diesem Programm sagt, welche Fenster nicht Transparent werden dürfen.
    Fazit: Ich hab den totalen durchblick (He das Wallpaper kam erst gerade! :D )

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Compression=0
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_UseX64=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    $lwh = 0
    HotKeySet("!t", "notransset")
    TraySetIcon("shell32.dll", -35)
    Opt("TrayAutoPause", 0)
    $hidden = 0
    $transp = 175
    $atransp = 220
    $trsp = 175
    $atrsp = 220
    While True
    $handle = WinGetHandle("[ACTIVE]")
    If $handle <> $lwh And WinGetTitle($handle) <> "" And WinGetTitle($handle) <> "Start" Then
    If winblocklist($handle) Then WinSetTrans($handle, "", $atransp)
    If winblocklist($lwh) Then WinSetTrans($lwh, "", $transp)
    $lwh = $handle
    EndIf
    sleep(50)
    WEnd
    Func winblocklist($name)
    If IniRead(@UserProfileDir&"\desing.ini", WinGetTitle($name), "block", "no") = "yes" Then Return False
    Return True
    EndFunc
    Func notransset()
    If $transp <> 255 Then
    $trsp = $transp
    $transp = 255
    $atrsp = $atransp
    $atransp = 255
    Else
    $transp = $trsp
    $atransp = $atrsp
    EndIf
    EndFunc

    [/autoit]

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™