# Alternative zu Robot (wegen Umlauten)



## spinnerudi (15. Sep 2006)

Ich habe eine virtuelle Tastatur. 
Die Tastendrucks werden per Robot.keypress(keycode) simuliert.
Im Forum bin ich auf die Suche nach der Lösung gegangen, um die Umlauttasten ä, ö und ü
zu simulieren.
Das Problem ist ja, dass diese Tasten keine Keycodes haben.

In einem Thread habe ich gelesen, dass ein User anscheinend eine Lösung mit der
AWTEventQueue gefunden hat!?
Hat jemand mehr Tipps???

Danke


----------



## spinnerudi (18. Sep 2006)

*push*


----------



## Gast (18. Sep 2006)

richtig.
implementiere AWTEventListener und in der Methode

```
public void eventDispatched(AWTEvent arg0) {
}
```
kannste dann alle events die passieren abfragen.

da werden dann auch umlaute ausgegeben.


wenn ich zb. nen frame benutze, der die methode implementiert, und dann ä drücke erhalte ich das hier:

KEY_RELEASED,keyCode=0,keyText=Unknown keyCode: 0x0,keyChar='ä',keyLocation=KEY_LOCATION_STANDARD


----------



## Grizzly (18. Sep 2006)

Gute Frage.

Habe gerade mal ein Fenster gebastelt und daran einen KeyListener rangehängt:
KeyChar = ä
KeyCode = 0
KeyEvent.getKeyText(e.getKeyCode()) = Unknown keyCode: 0x0

 :bahnhof:


----------



## thE_29 (18. Sep 2006)

Jo, das ist super lustig 


Hatte das Problem auch schonmal!

Anscheinened sind Sun alle ausländisches Zeichen einfach egal..

Dafür gibts ab 1.5 die WIndows Taste...


----------



## thE_29 (18. Sep 2006)

Nach bisi forschen kommt man zu so einem hack 


```
private void pressSpecialSign(int code, Robot instance)
  {
    Clipboard clippy = Toolkit.getDefaultToolkit().getSystemClipboard();
    Transferable clippysContent = clippy.getContents( null );
    try{

      StringSelection selection = new StringSelection(new String(new char[]{(char)code}));
      clippy.setContents( selection,selection  );
      //drückt STRG+V == einfügen
      instance.keyPress( KeyEvent.VK_CONTROL );
      instance.keyPress(KeyEvent.VK_V);
      instance.keyRelease(KeyEvent.VK_V);    
      instance.keyRelease( KeyEvent.VK_CONTROL );
        //oder wenn das keine Exception wirft
  /*    robi.keyPress( KeyEvent.VK_PASTE );
      robi.keyRelease( KeyEvent.VK_PASTE );*/
    }
    catch(Exception ex)
    {
      ex.printStackTrace();
    }
    clippy.setContents( clippysContent ,null); //zurücksetzen vom alten Kontext
  }
```


----------



## spinnerudi (20. Sep 2006)

Na gut aber die Tasten ä, ö und ü haben ja keinen Keycode, wie soll ich deiner pressSpecialSign-Methode dann diesen code mitgeben???


----------



## Tobias (20. Sep 2006)

code ist kein Tastancode sondern ein ASCII-Wert.

mpG
Tobias

PS: Ich finde die Lösung ziemlich ausgefuchst...


----------



## lhein (21. Sep 2006)

also einige Sachen kannst auch emulieren...

z.B. Ä als Events:

ALT pressed
numpad 0 pressed + released
numpad 1 pressed + released
numpad 9 pressed + released
numpad 6 pressed + released
ALT released

funktioniert halt nur mit ASCII.

lr


----------



## thE_29 (21. Sep 2006)

Das hatte ich zuerst auch 


Nur ist der Wert bei dem Ö nicht ANSI was in Java zurückkommt, sondern ein falscher!

Würdest du das Ö nehmen und den char Wert nehmen und den so eingeben lassen, kommt irgendwas raus..


----------



## lhein (21. Sep 2006)

...Ö geht bei mir per ALT + NUMPAD 0 - 2 - 1 - 4


----------



## thE_29 (21. Sep 2006)

Ajo...

Diese Werte sollten nie > 255 sein 

Ä = 142

Ö = 153

In Java kommen aber für Ä und Ö 196 und 214 zurück!

Wenn man also ne 0 vorne hinklebt, klappt das auch so (wusste ich nicht)

Ich bleibe bei den "originalen" Codes


----------



## spinnerudi (21. Sep 2006)

Dieser Tipp mit ALt + Code war gut. 
Danke, so funktionierts.


----------



## thE_29 (21. Sep 2006)

Tjo und diese Zahl übergibst du meiner Funktion und dann brauchst du kein ALT rumgefumle!


----------

