2014-12-10 12 views
5

Ich benutze Robot Klasse und KeyEvent Schlüsselcodes, um alle anderen Schlüsselereignisse zu generieren, und sie funktionieren gut, aber ich brauche auch Hangul Schlüssel (koreanische Tastatur umschalten). Anscheinend hat KeyEvent keinen Schlüsselcode für diesen Schlüssel, also stecke ich fest :(Gibt es eine Möglichkeit, dieses Hangul-Schlüsselereignis zu generieren? Gibt es eine Möglichkeit, den Windows-Schlüsselcode wie VK_HANGUL (0x15) anstelle der zu verwenden KeyEvent Tastencodes? Wenn das möglich ist, wäre das Ändern aller Tastencodes kein Problem ... Oder nehmen Sie das Tastenereignis einmal und speichern Sie es dauerhaft irgendwo und verwenden Sie das für immer ...?Wie erzeuge ich Tastaturereignisse, die keinen Schlüsselcode in Java haben?

Was ich bin Wenn Sie versuchen, eine Bildschirmtastatur zu erstellen, die Zahlen, Alphabete und Koreanisch enthält, klicken Sie auf ein Symbol und es wird das Schlüsselereignis des entsprechenden Buchstabens generiert, sodass der Buchstabe eingegeben wird. (Alles außer Koreanisch funktioniert ordnungsgemäß.)

In der Lage zu sein, das Hangul Key Event zu generieren wäre nett, aber wenn das ist nicht möglich, gibt es Vorschläge, wie ich das erreichen könnte? Vielleicht könnte ich jeden koreanischen Buchstaben mit dem entsprechenden Alphabet auf der Tastatur verbinden (zum Beispiel g ist ㅎ auf herkömmlichen Tastaturen, die Eng und Koreanisch haben) oder etwas, aber dann, wie schicke ich es an andere Anwendungen?

Entschuldigung, wenn diese Frage so überall ist. Ich bin nur wirklich verloren.

+0

Dies kann Ihnen helfen. Nicht als Duplikat markieren, da es kein Duplikat zu sein scheint (tatsächlicher Schlüssel vs Unicode-Interpretation). http://stackoverflow.com/questions/397113/how-to-make-the-java-awt-robot-type-unicode-characters-is-it-possible Ich bin nicht 100% vertraut mit Robot oder Hangul, also ich bin mir nicht sicher ob es Unicode gibt. – Compass

+0

Danke für das Kommentieren! Den alten Code wie in deinem Link zu verwenden, ist eigentlich eine gute Idee. Du musst aber 'Alt' halten und dann zu Numpad gehen und '+' und andere Ziffern von Unicode hex drücken, oder? Wie bekomme ich den Roboter, um die NUMPAD-Taste '+' zu drücken? Ich habe versucht SHIFT = aber das funktioniert nicht ... – Jade

+0

http://StackOverflow.com/questions/15605109/Java-keybinding-plus-key Ich bin nicht wirklich gut mit wichtigen Ereignissen, aber das klingt wie es funktionieren wird – Compass

Antwort

0

Ich fand eine Lösung für das Problem. Ich habe JNA verwendet, um Keyboard-Events zu generieren.

Hier sind einige Codes, falls jemand sie braucht.

Grund Sachen für die Verwendung von JNA und keybd_event Methode von User32.dll:

import com.sun.jna.*;  
import com.sun.jna.Native;  
import com.sun.jna.platform.win32.User32; 
import com.sun.jna.win32.StdCallLibrary;  
public interface User32jna extends User32 { 
User32jna INSTANCE = (User32jna) Native.loadLibrary("user32.dll",User32jna.class); 
public void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); 
} 
User32jna u32 = User32jna.INSTANCE; 

Und dann diese einfügen, wo Sie Schlüsselereignis erzeugen müssen:

u32.keybd_event((byte) 0x15,(byte)0xF2,0,0); 

0x15 und 0xF2 sind die virtuellen Schlüssel Code und Tastatur Scan-Code für Hangul/Englisch toggle-Taste, die ich suchte, aber suchen Sie die Codes für welche Taste Sie benötigen, und ersetzen Sie diese dann, und Sie können so ziemlich jedes Schlüsselereignis generieren.

Sie benötigen jna.jar und platform.jar, damit dies funktioniert.

+1

mit JNA für diese Art von Aufgabe wird höchstwahrscheinlich Ihre Funktionalität irgendwann in der Zukunft zu brechen.Die WINAPI ändert sich heutzutage schnell, Hard-Linking von Ihrem Bytecode zu Maschinencode erfordert konstante Tests auf allen Ihren Zielplattformen - und irgendwann sogar neu zu schreiben, mit konstanten Primitiven (wie die, die Sie verwenden), kann dies ein wenig länger dauern Microsoft ändert Konstanten nicht oft - aber es wird passieren, das ist, warum sie native Makros für diese eingeführt haben, werden sie immer auf die richtige Primitive zuordnen. – specializt

+0

Ja, das entspricht dem, worüber ich zuerst besorgt war, weshalb ich "eine" Lösung anstelle von "der" Lösung geschrieben habe. Irgendwann dachte ich, dass es in meinem Fall keine Rolle spielen würde, da dies nur ein Semester lang ist. Würden Sie mir bitte mehr über die nativen Makros erzählen? Ich wusste nicht, dass sie existieren. Nach welchen Keywords soll ich suchen, um Informationen über diese zu erhalten? – Jade

+1

Kurzübersicht: http://msdn.microsoft.com/en-us/library/b0084kay.aspx. Die meisten der Zehntausende von Makros sind funktionsspezifisch, sie werden immer in jeder Funktion, die sie verwendet, erwähnt und erklärt - einige Leute könnten sie als Parameter-Konstanten bezeichnen, in Ihrem Fall: http://msdn.microsoft.com/ en-us/library/windows/desktop/ms646304% 28v = vs.85% 29.aspx und insbesondere http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85)) .aspx - es ist normalerweise viel besser, eine native App für diese Art von Aufgabe zu schreiben und dabei alle Microsoft-Standards einzuhalten. – specializt

Verwandte Themen