2014-12-10 21 views
5

Utilizzo codici classe Robot e codici chiave KeyEvent per generare tutti gli altri eventi chiave e funzionano bene, ma ho anche bisogno del tasto Hangul (attivazione/disattivazione della tastiera coreana). Apparentemente KeyEvent non ha un codice chiave per questa chiave, quindi sono bloccato :(C'è un modo per generare questo evento chiave Hangul? C'è un modo per usare il codice chiave di Windows come VK_HANGUL (0x15) invece del Codici chiave KeyEvent? Se è possibile cambiare tutti i codici chiave non sarebbe un problema ... O in qualche modo prendere l'evento chiave una volta e memorizzarlo in modo permanente da qualche parte e usarlo per sempre ... ???Come posso generare eventi di tastiera privi di codice chiave in Java?

Cosa sono provare a fare è creare una tastiera su schermo che abbia numeri, alfabeti e coreano. Fai clic su un'icona e genererà l'evento chiave della lettera corrispondente in modo che la lettera sia digitata. (Tutto tranne il passaggio al coreano funziona correttamente)

Essere in grado di generare l'evento chiave Hangul sarebbe bello ma se quello Non è possibile, ci sono suggerimenti su come potrei ottenere questo? Forse potrei associare ogni lettera coreana con l'alfabeto corrispondente sulla tastiera (per esempio g è ㅎ su tastiere convenzionali che hanno sia l'inglese che il coreano) o qualcosa del genere ma come posso inviarlo ad altre applicazioni?

Scusate se questa domanda è così dappertutto. Sono davvero perso.

+0

Questo può aiutarti. Non contrassegnato come duplicato in quanto non sembra essere un duplicato (chiave effettiva vs interpretazione Unicode). http://stackoverflow.com/questions/397113/how-to-make-the-java-awt-robot-type-unicode-characters-is-it-possible Non sono al 100% familiare con Robot o Hangul quindi Non sono sicuro se ci sia unicode interpretato. – Compass

+0

Grazie per il commento! Usare il codice alt come nel tuo link è in realtà una buona idea. Tuttavia, è necessario tenere premuto "Alt" e quindi andare al tastierino numerico e premere "+" e altre cifre di Unicode hex, giusto? Come faccio a far sì che il robot preme il tasto NUMPAD '+'? Ho provato SHIFT = ma non funziona ... – Jade

+0

http://stackoverflow.com/questions/15605109/java-keybinding-plus-key Non sono molto bravo con gli eventi chiave, ma sembra che funzionerà – Compass

risposta

0

Ho trovato una soluzione al problema. Ho usato JNA per generare eventi di tastiera.

Ecco alcuni codici nel caso in cui qualcuno ne abbia bisogno.

roba di base per l'utilizzo di JNA e il metodo keybd_event da 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; 

E poi inserire questo in cui è necessario generare evento chiave:

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

0x15 e 0xF2 sono la chiave virtuale codice e codice di scansione della tastiera per Hangul/tasto di commutazione inglese che stavo cercando, ma cercare i codici per qualsiasi tasto necessario e quindi sostituirli, e puoi generare praticamente qualsiasi evento chiave.

Avrete bisogno di jna.jar e platform.jar perché funzioni.

+1

utilizzando JNA per questo tipo di attività molto probabilmente si interromperà la funzionalità a un certo punto nel futuro.Il WINAPI cambia rapidamente al giorno d'oggi, collegando duramente il tuo bytecode al codice macchina richiede test costanti su tutte le tue piattaforme di destinazione - e ad un certo punto anche riscrivendolo, con primitive costanti (come quelle che stai usando) questo potrebbe funzionare un po 'più a lungo microsoft non cambia costanti spesso - ma succederà, ecco perché hanno introdotto macro native per queste, si mapperanno sempre alla primitiva corretta. – specializt

+0

Sì, questo è in linea con ciò di cui ero preoccupato all'inizio, e questo è il motivo per cui ho scritto "una soluzione" anziché "la" soluzione. Alla fine ho pensato che non avrebbe avuto importanza nel mio caso poiché questo è solo un progetto lungo un semestre. Tuttavia, potresti dirmi di più sulle macro native? Non sapevo che esistessero. Quali parole chiave dovrei cercare per ottenere informazioni su di esse? Panoramica breve – Jade

+1

: http://msdn.microsoft.com/en-us/library/b0084kay.aspx. La maggior parte delle decine di migliaia di macro sono specifiche della funzione, vengono sempre citate e spiegate in ogni funzione che le utilizza: alcune persone potrebbero fare riferimento a esse come costanti dei parametri, nel tuo caso: http://msdn.microsoft.com/ it-it/library/windows/desktop/ms646304% 28v = vs.85% 29.aspx e in particolare http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85) .aspx - di solito è molto meglio scrivere un'app nativa per questo tipo di attività, aderendo a tutti gli standard Microsoft mentre lo fa. – specializt