我正在用java开发一个屏幕键盘。对于每个可能的键,此键盘都有一个JComponent。当在按钮上检测到鼠标按下时,我想向当前焦点所在的应用程序发送特定的键盘代码。键盘本身在JFrame中,没有任何装饰,并设置为always-on-top。
我发现Robot类可以用来在本地队列上模拟这些键盘事件。但是,在本例中,选择JComponent将意味着在JFrame上接收到按键,而我无法在其他应用程序中接收到它
如何保持屏幕上的键盘“始终无焦点”?是否有可能使用另一种方法来发送按键?
发布于 2008-10-20 15:25:17
显然,要做到这一点,唯一的方法是有一个JNI层,它将从java转换到本机。Java没有简单的方法来提供这样的功能。
对于想要学习JNI的人来说,这对于一个小型的第三方库来说可能是一个有趣的概念。
发布于 2012-01-13 00:41:39
当我试图用实际的键盘和鼠标命令来控制游戏机器人时,我发现了jnativehook (更像人类)。
发布于 2008-10-09 14:24:40
到目前为止,我能找到的唯一解决方案是让每个键都是一个焦点(这样它就不能有焦点),并在JFrame上设置以下属性:
setUndecorated(true);
setFocusableWindowState(false);
setFocusable(false);
enableInputMethods(false);现在,在使用robot类时,我可以通过单击键将事件发送到任何焦点窗口。唯一的限制是,它似乎只对属于同一虚拟机的窗口起作用,而对任何其他系统窗口都不起作用。
https://stackoverflow.com/questions/156912
复制相似问题