Simples Script will nicht funktionieren

  • Servus

    Na, es ist schon peinlich. Ehrlich gesagt, weiß ich nicht, warum das so nicht funktioniert.
    Mein Script soll auf ALT+g (Kombination) innerhalb eines Spieles einfach den Text "Good Game All"+ENTER an Cursorposition ausgeben.

    Also: Cursor in die Zeile -> ALT+g drücken -> Textausgabe

    Hier das Script:

    [autoit]

    HotKeySet ( "!g","ggall")
    Func ggall()
    Send("Good Game All{ENTER}")
    EndFunc

    [/autoit]

    Weder innerhalb des Spieles noch anderswo (Browser, versch. Editoren...) kommt eine Textausgabe. Alles was passiert, ist ein glückliches kleines "Plong"-Geräusch.
    Ich war überzeugt, mehr als dieses Script sei nicht nötig. Also entweder falsch gedacht,oder zu doof in der Ausführung.

    Freue mich auf eine Antwort.

    LG, Sascha

  • Dein Script startet, wird abgearbeitet, und beendet sich sofort wieder :)

    [autoit]


    HotKeySet ( "!g","ggall")

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

    ;Endlosschleife fehlt
    While 1
    WEnd

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

    Func ggall()
    Sleep(2000)
    Send("Good Game All{ENTER}")
    exit
    EndFunc

    [/autoit]

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • Hi,

    [autoit]

    HotKeySet ( "!g","ggall")

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

    While 1
    sleep(100)
    Wend

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

    Func ggall()
    Send("Good Game All{ENTER}")
    EndFunc

    [/autoit]

    /Edit: Zu spät :)

  • Meine Güte...

    Ich wusste es muss wahl peinlich einfaches sein... Aber das?!
    Hätte ja auf die Idee kommen können in den taskmanager zu schauen, dann hätte ich sicher was gemerkt.

    Ok, hilft alles nörgeln nichts.
    Danke für die Hilfe.

    LG, Sascha

    Edit: Hm, ein kleines Prob ist aufgetreten.
    Wenn das Prog läuft, funktionieren normale tastendrücke nach dem ALT+g nicht mehr. Wird das Alt+g nun kontinuirlich weitergesendet, oder woran mag das liegen?
    Vielleicht muss ich noch eine Abbruchbedingung programmieren? Oder den Hotkey innerhalb der Funktion (nach der Textausgabe) wieder "deaktivieren"?

    LG

    Einmal editiert, zuletzt von Exo1980 (22. Juli 2008 um 22:22)

  • Die Kombi von ALT+g ist etwas unglücklich, bei mir bleibt er dann immer im Menü hängen :( wenn Du vielleicht strg+alt+g nimmst, klappt es bei mir besser:

    [autoit]

    ;Tastenkombi setzen
    HotKeySet("^!g","_Ausgabe")

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

    ;Entlosschleife
    While 1
    ;Ein kleines Sleep um die CPU zu entlasten
    Sleep(200)
    WEnd

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

    ;Ausgabe Funktion
    Func _Ausgabe()
    ;Was gesendet werden soll
    Send("Good Game All{ENTER}")
    ;Script beenden
    Exit
    EndFunc

    [/autoit]

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • Ah, das ist viel besser, stimmt.

    Innerhalb des Spieles wurde der Text auch ausgegeben. Allerdings, als ich das Spiel über ESC verlassen wollte, schlossen sich alle Fenster.
    Das Exit habe ich nun nicht benutzt.

    Es sollen halt verschiedenste Texte, die immer wieder geschrieben werden, auf eine für das Spiel typische Weise formatiert, ausgegeben werden.
    Die Texte sollen (nachdem das Programm gestartet wurde) die ganze Zeit verfügbar, und über verschiedene Kommandos (hier z.B. STRG+ALT+g) aufrufbar sein.

    Nach dem Beenden des Spieles kann das Prog über einen Beendenbefehl (mach ich dann über einen ESC-Hotkey) beendet werden.

    Nur, das sich die Fenster einfach so schlossen nach meinem ESC (wovon nichts im Quelltext steht) beunruhigt mich etwas, da an dieser Stelle das SPielmenü hätte aufgerufen werden müssen. Und auch die Maus sponn irgendwie.

    LG

    EDIT: Unglaublich, was hier abgeht.
    Nachdem ich den STRG+ALT+g Hotkey benutzt habe, spielt alles verrückt.
    Bei Doppelklick der Maus passiert dann das, was bei Rechtsklick->Eigenschaften sonst passiert
    ESC öffnet das Startmenü...

    Sehr seltsame Dinge gehen da vor, und ich verstehe es einfach nicht. *seufz*

    Einmal editiert, zuletzt von Exo1980 (22. Juli 2008 um 23:00)

  • Hm ja, bei mir war es halt so das die ALT Taste immer noch aktiv war :) aber noch ein Tip nebenbei, Du könntest ja immer zwischen zeitlich mal prüfen lassen ob das Spiel noch am laufen ist, und falls nicht das Script automatisch beenden lassen.

    Nur mal so als Idee :)
    [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Tastenkombi setzen
    HotKeySet("^!g","_Ausgabe_ByeBye")
    HotKeySet("^!n","_Ausgabe_Nice")
    HotKeySet("{ESC}","_Exit_Script")

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

    ;Prozessnamen angeben (Prozessname aus Taskmanager entnehmen)
    $Processname = "notepad.exe"

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

    ;Auf Prozesswarten - Warten bis das Spiel gestartet wurde
    Do
    Sleep(250)
    Until ProcessExists($Processname)

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

    ;Prüfintervall starten ob Spiel noch läuft
    AdlibEnable("_Exit_Script",15000)

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

    ;Entlosschleife
    While 1
    ;Ein kleines Sleep um die CPU zu entlasten
    Sleep(200)
    WEnd

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

    ;Ausgabe Funktion
    Func _Ausgabe_ByeBye()
    ;Was gesendet werden soll
    Send("Good Game All{ENTER}")
    EndFunc

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

    ;Ausgabe Funktion
    Func _Ausgabe_Nice()
    ;Was gesendet werden soll
    Send("Nice{ENTER}")
    EndFunc

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

    ;Funktion ob das Spiel noch läuft
    ;ansonsten das Script beenden.
    Func _Exit_Script()
    If Not ProcessExists($Processname) Then Exit
    EndFunc

    [/autoit]

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • Nein nein, das Spiel bleibt schon am Laufen.

    Also, ich habe bisher folgendes:

    [autoit]


    HotKeySet ("^!g","ggall")
    HotKeySet("{ESC}","ExitScript")

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

    $loopflag=0

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

    While 1
    Sleep(200)
    WEnd

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

    Func ggall()
    Send("{SPACE}Good Game All{ENTER}")
    EndFunc

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

    Func ExitScript()
    HotKeySet("{ESC}")
    Send("{ESC}")
    Exit;
    EndFunc

    [/autoit]

    Also, bei ESC wird der ESC-Hotkey zurückgesetzt, damit ESC an das Spiel gesendet werden kann. (Hab ich so gelesen)

    Folgendes passiert:

    - Ich starte das Programm (siehe Script)
    - Nun starte ich das Spiel
    (Alles läuft prima und rund und es gibt keine Probleme)
    - Ich betrete einen Server testweise
    - Ich drücke STR+ALT+g
    - Der Text wird korrekt ausgegeben
    - Ich will das Spiel nun wieder verlassen
    - also drücke ich ESC
    - Das Menü im Spiel wird nicht, wie erwartet, aufgerufen
    - Alle Fenster minimieren sich nun stattdessen (legen sich in die Taskleiste, aber die Programme werden nicht beendet)

    ESC ruft nun plötzlich das Windoof-Startmenü auf und ein Doppelklick der Maus zeigt einem die Eigenschaften einer Datei.

    das kann ja alles nicht wirklich sein, oder? WIe soll das gehen, das alle möglichen Funktionen (sogar der Maus) plötzlich durcheinander geraten?

    *Verzweiflung*

  • Hi, drück mal Strg und geilchzeitg ESC , dann weist du warum :). Das Startmenu öffnet sich. Weil das in den Vordergrund will, minimieren sich alle Fenster ...
    D.h. dann wohl, dass die Strg-Taste gedrückt wurde, aber intern nicht mehr losgelassen wurde.

  • Ja, das kommt hin.
    Aber es ist, als würden dauerhaft ALLE Tasten gleichzeitig weitergedrückt. Und wie kann es sein, das sogar die Mausfunktionen nicht mehr stimmen?
    Woran genau liegt das denn, wo ist der Fehler im Script dann? Das Problem sollte sich ja mit dem richtigen Script nicht ergeben.
    LG

  • Aber es ist, als würden dauerhaft ALLE Tasten gleichzeitig weitergedrückt.

    Wenn dem so wäre, dann würde das Starmenu nicht aufgehn. Wenn du z.B. Strg + Alt + g + ESC drückst, gehts nicht auf.
    Was das mit der Maus zu tun hat weis ich nicht. Probier das Script mal ohne das Spiel aus, drück deine Kombination und danahc ESC. Wenn das Startmenu nicht aufgeht, weist du das es am Spiel liegt.
    Du kannst vielleicht noch versuchen die Priorität vom Script hochzusetzen, weil es sein kann, das das Spiel das Script einfach "verschuckt" :rofl: ...

  • Nein, immernoch genau derselbe Effekt.
    Sogar wenn ich mein Programm beendet habe, ändert sich nichts.
    Erst, wenn ich STRG+ALT+ENTF zusammen drücke, normalisiert sich alles.

    Wäre wirklich schön, wenn sich jemand einen Reim auf das alles machen könnte.

    LG

  • Ich habe immernoch das gleiche Problem.

    Fällt keinem eine Erklärung dafür ein? Es wäre schön, wenn sich das Problem irgendwie lösen würde, bzw wenn ich heraus bekäme, was da eigentlich passiert und warum.
    Irgendwo liegt in der ganzen Sache ein Fehler, und einer der Experten hier wird doch sicher einen EInfall haben.

    LG

  • Welche AutoIt-Version hast du denn? Wenn es nicht die neueste ( v3.2.12.1) ist, würde ich mal updaten :)

  • Oho, ja... Schon viel besser.
    Jetzt spinnt es viel weniger.

    Aber eine Sache ist immer noch:

    Wenn ich im Spiel ESC drücke, minimiert sich das Fenster, anstatt das Menü aufzurufen. Muss ja auch an dem Script liegen, oder?
    Also scheint das Script auf ESC zu reagieren und das Fenster zu minimieren, obwohl ich von ESC nichts programmiert habe. Was geht da vor?

    Muss ich noch etwas programmieren, das ESC (oder sonstige tasten?) vom Script ignoriert werden?

    LG

  • Aktuellster Stand:

    Das Problem ist weitestgehend gelöst, denke ich.

    Ich benutze nun, statt STRG-ALT+g, die Numpad-Zahlen, um einen Text automatisch einzufügen. Das funktioniert auch soweit.

    Allerdings hat sich nun ein anderes Problem ergeben:
    Unicodes werden nicht korrekt dargestellt.

    Innerhalb des von mir zu sendenden Textes befindet sich ein griechisches THETA, anstatt des Buchstaben "O".
    Unicode wird durch das Spiel unterstützt... Aber das griechische Theta wird nicht ausgegeben, sondern ein Quadrat.
    Als ich versuchte, den Text in Notepad ausgeben zu lassen (das auf UTF 8 gestellt ist), konnten die Unicodes dort auch nicht interpretiert werden.

    Innerhalb des Autoit-Editors werden alle Unicode-Buchstaben wie gedacht dargestellt.

    LG

  • *mal vorsichtig hochschieb*

    Hat jemand vielleicht doch noch eine Idee zu diesem Thema? Das Problem ist nicht wirklich aus der Welt.
    Ich weiß, im Vergleich zu den anderen Themen mag dieses eher lächerlich sein... Trotzdem würde ich es ganz gerne abschließen.

    LG :)

  • Ahhhh, ich hatte gelesen das stellenweise Unicode noch nicht voll unterstützt ist. Dachte in der neuesten Stable ginge es aber.
    Kann man das denn umgehen?

    Ich müsste einen Text (mit Unicode u.A.) an einer Cursorposition ausgeben.
    Lässt sich das überhaupt anders als mit Send bewerkstelligen? *zweifel*

    LG

    EDIT: Ich dachte, zumindest wenn ich die Zeichen mit {ASC ...} ausgeben lasse, ginge es.

  • EDIT: Ich dachte, zumindest wenn ich die Zeichen mit {ASC ...} ausgeben lasse, ginge es.

    Oops, es sollte doch gehen, tut es aber nicht...
    Send("{ASC 0952}") -> wird " ¸"
    //Edit: Mit SendInput geht es :) Hier eine _SendUnicode UDF:

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    $process = Run("notepad.exe")

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

    ;~ $NotepadHWND = "Untitled - " ; EN
    $NotepadHWND = "Unbenannt - " ; DE

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

    WinActivate($NotepadHWND)
    WinWaitActive($NotepadHWND)
    _SendUnicode(ChrW(0x398) & ChrW(0x3B8))

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

    ;~ InputBox("It should be:","It should be this char: Copy it to Notpad and see, that it is accepted",$text)
    Func _SendUnicode($text)
    Local Const $tagINPUT_Keyboard = "DWORD type; ushort wVk; ushort wScan; DWORD dwFlags; DWORD time; ULONG_PTR dwExtraInfo;dword;ULONG_PTR;"
    Local Const $INPUT_KEYBOARD = 1
    Local Const $KEYEVENTF_UNICODE = 0x4
    Local Const $KEYEVENTF_KEYUP = 0x2
    Local $tinp = DllStructCreate($tagINPUT_Keyboard & $tagINPUT_Keyboard)
    Local $sendDLL = DllOpen("user32.dll")
    $text = StringSplit($text, "")
    For $i = 1 To $text[0]
    DllStructSetData($tinp, 1, $INPUT_KEYBOARD)
    DllStructSetData($tinp, 7, $INPUT_KEYBOARD)
    DllStructSetData($tinp, 2, 0)
    DllStructSetData($tinp, 8, 0)
    DllStructSetData($tinp, 3, AscW($text[$i]))
    DllStructSetData($tinp, 9, AscW($text[$i]))
    DllStructSetData($tinp, 4, $KEYEVENTF_UNICODE)
    DllStructSetData($tinp, 10, BitOR($KEYEVENTF_KEYUP, $KEYEVENTF_UNICODE))
    DllStructSetData($tinp, 5, 0)
    DllStructSetData($tinp, 11, 0)
    DllStructSetData($tinp, 6, 0)
    DllStructSetData($tinp, 12, 0)
    $ret = DllCall($sendDLL, "uint", "SendInput", "uint", 1, "ptr", DllStructGetPtr($tinp), "int", 28)
    Next
    DllClose($sendDLL)
    EndFunc ;==>_SendUnicode

    [/autoit]

    3 Mal editiert, zuletzt von progandy (26. Juli 2008 um 12:28)