[Java]Bot Pausefunktion

08/07/2009 15:44 Kinu#1
Hi all,

momentan bastel ich an meinem ersten Bot. (auf Pixelbasis)
Läuft soweit auch alles ganz.

Jetzt will ich jedoch eine pause / exit Funktion per Tastendruck in den Bot einbauen.
z.B. p für pause, e für exit
(Mittels Taskmanager den Bot beenden nervt..^^)

Problem an der ganzen Sache ist einfach, dass ich nicht weiß, wie man am effektivsten Tastendrücke ausließt, welche nicht auf dem GUI Fenster passieren. Die GUI verschwindet ja, sobald der Bot gestartet wurde bzw. kommt das Spielfenster in den Vordergrund.
Dadurch kann ich keine action / eventlistener benutzen, die auf Tastendrücke reagieren.
Also müsste ich irgendwie Global über alle Anwendungen hinweg registrieren können, wann eine Taste und welche gedrückt wird.

Noisuf-X hat mir diesbezüglich eine Windows dll (user32.dll) vorgeschlagen. Leider hab ich bis jetzt noch garkeine Erfahrung mit dem Umgang von dlls.

Deshalb wollte ich fragem, ob es vllt. noch eine einfachere Variant gibt, Tastendrücke zu registriern bzw ne Pausefunktion in einen Bot einzubaun.
08/07/2009 16:15 Akorn#2
Mittels der WinApi funktion GetAsynKeyState kannst du systemweit prüfern ob eine taste gedrückt wurde.
08/07/2009 16:16 backo#3
Falls windooz:

[Only registered and activated users can see links. Click Here To Register...]
08/09/2009 22:01 Kinu#4
okay vielen dank backo, habs soweit hinbekomm. Exit und Pause hotkeys funktionieren.

Blos die Pause Funktion ansich will immer noch nicht so wie ich das will, was wohl an meinem thread aufbau liegt?!

Habe 1 eigenen thread, in dem der Bot ausgeführt wird, welcher anschließend in einer Endlosschleife hängt.
und den mainthread (von der GUI), der den andern thread erstellt bzw startet.

Problem ist jetzt, das ich es nicht schaffe, von dem mainthread aus(wo die listener eingebaut sind) den 2ten thread zu pausieren / stoppen

habe schon interrupt(), wait(), yield() ausprobiert, aber nie will der Bot anhalten.
Als ich versuchte mit wait(20000) 20 Sek anzuhalten, bemerkte ich, dass er den Mainthread für 20 Sekunden anhielt und keine Befehle mehr entgegennahm und nicht den thread für mein Bot.

Hier mal Codebeispiel:

Code:
        public void onHotKey(int aIdentifier) {
            //Wenn Taste gedrückt wurde, 
           if (aIdentifier == 1){
                  //  Bot.getInstance().sleep();
           }
        }
Sleep Funktion in der Bot Klasse:

Code:
    public void sleep(){
      Thread.currentThread().interrupt();
    }
Sleepfunktion anders:
Code:
    public void sleep(){
        try{
            Thread.currentThread().wait();
        }catch(java.lang.InterruptedException awtt){
            //do nothing
        }
    }
der bot wird wie gesagt in dem 2. Thread aufgerufen.
Auch wenn ich das currentThread() weglass, funktioniert beides nicht :/
08/09/2009 23:17 push ebp#5
erstellt doch ein weiteren thread, der dir dann zb eine globale variable auf true setzt.. und solange sie false ist, wird angehalten :P
08/10/2009 08:20 Kinu#6
ja die idee ist mir auch gekomm, dachte es geht einfacher :)

naja trozdem danke :D