CMD + Autoit

  • Hallo,
    es liegt folgendes problem vor.
    ich habe einen server für ein spiel,
    den ich per batch datei starte, damit ich ihm mehr ram zuweisen kann.
    => ein cmd fenster öffnet sich und bleibt offen
    gibt man ingame einen befehl per chat ein,
    so wird dieser nicht nur im ingame chat angezeigt, sondern auch im cmd fenster.
    dort steht dann z.b. /give SpielerName ItemID
    nun möchte ich dauerhaft das cmd fenster auslesen und abfragen ob ein bestimmter befehl ausgeführt wurde,
    damit ich bestimmte befehle sperren kann.
    wird z.b. ein bestimmter befehl eingegeben so soll in das cmd fenster "/kick SpielerName" geschrieben werden,
    um den spieler zu kicken.
    ich weiß, dass man abfangen kann was cmd zurückgibt wenn man beispielsweise ipconfig eingibt,
    wie geht es jedoch in diesem fall?
    :)

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

    Einmal editiert, zuletzt von retrokid (23. Februar 2011 um 18:22)

  • Ja, es ist Minecraft
    aber wie soll ich die Items verbieten?
    Habe einen Hamachi Server.

    Und was muss ich jetzt als erster Paramater bei Run reinschreiben, wenn ich eine Batch-Datei
    Inhalt: ( java -Xmx2048M -Xms2048M -jar minecraft_server.jar )
    starten will

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • @echo off
    java -Xms1024M -Xmx1024M -jar minecraft_server.jar nogui
    pause

    Und einfach eine datei machen server.PROPERTIES (PROPERTIES-Datei) die ungefähr so ausschaut

  • Schon Klar mit der Properties File kenn ich mich aus, allerdings
    meine ich dies schonmal getestet zu haben.
    Ich versuchs nochmal.
    Edit:
    Hast du nen Hamachi Server?

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • Ja, bei so einem Server geht das, ist ja ein root Server.
    Bei Hamachi Servern gehen nur bestimme Properties Befehle.
    Naja ich kanns ja mal mit Autoit versuchen.

    Edit:
    So habe jetzt etwas mit StdoutRead() herumgespielt.
    Beim Zweiten mal der While-Schleife gibt er die erste Zeile zurück,
    danach hört er auf weil error = 1 ist. aber wieso kann er die zeilen danach nicht einlesen?

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

    Einmal editiert, zuletzt von retrokid (27. Januar 2011 um 13:31)

  • Wieso schließt sich denn der Prozess,
    wenn man ihn startet, aber nicht beendet?

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

    Einmal editiert, zuletzt von retrokid (31. Januar 2011 um 19:41)

  • Ok, dann erneuer ich jetzt die Frage:
    Wie verhindere ich, dass sich der Prozess schließt
    und wie kann ich die darauf folgenden Zeilen einlesen,
    ohne dass eine Fehlermeldung ausgegeben wird???
    :)

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • ok, das auslesen klappt soweit jedoch kommt der fehler, dass er eine datei nicht finden kann, die in der bat gestartet wird.
    starte ich die bat jedoch manuell wird die datei gestartet

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • Meine Vermutung: Die .bat liegt nicht im Skriptverzeichnis, der Aufruf der zu startenden Datei in der Bat enthält nicht den kompletten Pfad -> es wird das aktuelle Arbeitsverzeichnis verwendet, was jedoch nicht das Verzeichnis der .bat ist. Abhilfe schafft

    [autoit]

    EnvSet()

    [/autoit]
  • wie genau soll ich den diesen befehl anwenden,
    und noch was: die .bat, die .jar ,die die .bat startet und das autoit-skript liegen im selben ordner.
    und hier der quellcode

    [autoit]

    #include <Constants.au3>

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

    Local $foo = Run("C:\Users\Nathan\Desktop\Minecraft\Run.bat", "C:\Users\Nathan\Desktop\Minecraft\", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    Local $line
    While 1
    $line = StdoutRead($foo)
    If @error Then ExitLoop
    MsgBox(0, "STDOUT read:", $line)
    Wend

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

    While 1
    $line = StderrRead($foo)
    If @error Then ExitLoop
    MsgBox(0, "STDERR read:", $line)
    Wend

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

    MsgBox(0, "Debug", "Exiting...")

    [/autoit]

    hier die .bat:

    [autoit]

    java -Xmx2048M -Xms2048M -jar C:\Users\Nathan\Desktop\Minecraft\minecraft_server.jar

    [/autoit]
    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • Es kann immer nur eine Endlosschleife laufen -.-

    Evtl kannste dir das mal ansehn, da wird sowas erklärt:
    http://www.youtube.com/watch?v=N04WrgHpb-0

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>

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

    Local $foo = Run("C:\Users\Nathan\Desktop\Minecraft\Run.bat", "C:\Users\Nathan\Desktop\Minecraft\", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    Local $line
    While 1
    $line = StdoutRead($foo)
    If @error Then ExitLoop
    MsgBox(0, "STDOUT read:", $line)
    $line = StderrRead($foo)
    If @error Then ExitLoop
    MsgBox(0, "STDERR read:", $line)
    Wend

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

    MsgBox(0, "Debug", "Exiting...")

    [/autoit]
  • Danke, jetzt funzts :)
    Eins solltest du allerdings wissen:
    ich bin kein autoit-anfänger..(Es kann immer nur eine Endlosschleife laufen -.-)
    das war ein beispielskript aus der helpfile

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

    Einmal editiert, zuletzt von retrokid (25. Februar 2011 um 13:50)