Java automatisches einfügen der Zwischenablage?

2 Antworten

Falls du zusätzlich noch wissen willst wie du den Inhalt des Clipboards setzten oder auslesen kannst wüsste ich das auch noch.

Wenn du allerding nur testen willst ob STRG und V gleichzeitig gedrückt werden gibt es da eine ganz praktische Sache.

Ich gehe mal davon aus du hast einen KeyListener definiert, da müssen wir jetzt rein:

  1. Erstelle ein boolean Array mit der Länge der Anzahl der zeichen du du brauchst.
public static boolean[] keys = new boolean[2]; 
// Hier jetzt "2", man könnte bei zwei Keys auch einfach zwei boolean Variablen nehmen aber wenn man gleich mit einem Array arbeitet ist es später einfacher neue Keys hinzuzufügen

2. Diese Methode ist dafür da das oben deklarierte Array zu beschreiben. Zur funktionalität komme ich gleich.

private void setKey(short chr, boolean b){
    switch(chr){
        case KeyCode.VK_CONTROL: keys[0] = b;
        case KeyCode.VK_V:       keys[1] = b;
    }
}

3. Jetzt kommt die unter stehende Zeile in die "keyPressed-" Methode

setKey(e.getKeyCode(), true);
// "e" ist dabei das KeyEvent das der keyPressed-Methode übergeben wird, das e musst du eventuel umbenennen

4. Und das kommt in die keyReleased-Methode

setKey(e.getKeyCode(), false);
// Wieder das gleiche mit dem "e"

Was da genau passiert erkläre ich jetzt einfach mal an dem Beispiel, dass jemand auf die "V" Taste drückt:

  1. keyPressed wird aufgerufen
  2. setKey wird mit dem KeyCode von "V" und dem Wert "true" aufgerufen
  3. Dieser Fall tritt ein: "case KeyCode.VK_V:" -> keys[1] wird auf true gesetzt
  4. Jetzt passiert so lange Nichts bis entweder eine weitere Taste gedrückt wird oder eine gedrückte Taste losgelassen wird.

5.1 Die Taste "1" wird gedrückt: Ergebnis nichts passiert.

5.2 Die Taste "STRG" wird gedrückt: Ergebnis keys[0] und keys[1] sind beide "true", weil beide gleichzeitig gedrückt sind.

6. Taste "V" wird los gelassen: setKey wird mit dem KeyCode von "V" und dem Wert "false" aufgerufen

7. Dieser Fall tritt ein: "case KeyCode.VK_V:" -> keys[1] wird auf "false" gesetzt

Voila, schon kann getestet werden welche Tasten gleichzeitig gedrückt sind.

Kleiner Disclaimer: Je nach dem mit welcher Library du arbeitest könnte meine Lösung nicht zu 100% klappen, dann muss man zum Beispiel "KeyCode.VK_V" zu "KeyCode.V" ändern, aber das ist eigentlich kein Problem. Wenn du mir sagst womit du arbeitest kann ich auch gerne nach den KeyCodes schauen.

Ich habe das ganze in Verbindung mit JOGL geschrieben.

Ich hoffe das beantwortet deine Frage.

LG Jesaja

Du kannst mit der Robots-Klasse Tastendrücke simulieren. Hier ein passender Artikel dazu: http://www.qaautomationsimplified.com/selenium/simulate-copy-paste-action-using-java-robot-and-clipboard-class/.


Bruce815 
Beitragsersteller
 21.04.2020, 00:05

Leider nicht möglich. Vom Spiel aus ist STRG + V unterdrückt. Das Einfügen an sich jedoch nicht (woran ich arbeite gibt es bereits - deshalb muss es möglich sein).

0
Bruce815 
Beitragsersteller
 21.04.2020, 00:08
@Bruce815

Bzw. wenn man diese Taste hätte und sie drücken könnte, würde es auch klappen. Bin gerade auf die Idee gekommen jeden Buchstaben einzeln tippen zu lassen (wenn ich es hinbekomme).

0
Bruce815 
Beitragsersteller
 21.04.2020, 00:17
@Bruce815

Ne leider nicht möglich! Alleine schon, weil es bei Jnativehook keine Methoden für Symbole gibt. Es muss also so kopiert werden, als würde der Spieler es gerade abtippen. Gibts noch andere Möglichkeiten? Danke Erstmal!

0