繁体   English   中英

将键盘事件从java发送到任何应用程序(屏幕键盘)

[英]Sending a keyboard event from java to any application (on-screen-keyboard)

我正在开发一个带有java的屏幕键盘。 该键盘具有每个可能键的JComponent 当在按钮上检测到鼠标按下时,我想将特定键盘代码发送到当前焦点上的应用程序。 键盘本身位于一个没有装饰的JFrame ,并设置为始终在顶部。

我发现Robot类可以用来模拟本机队列上的这些键盘事件。 但是,在这种情况下,选择JComponent意味着在JFrame上收到按键,我将无法在其他应用程序中接收它

如何保持我的屏幕键盘“始终无焦点”? 是否可以使用另一种方法发送按键?

当我试图用实际的键盘和鼠标命令控制一个游戏机器人时(我更像“人类”),我找到了jnativehook

到目前为止我唯一能找到的解决方案是将每个键都设为JComponent(因此它不能有焦点),并在JFrame上设置以下属性:

    setUndecorated(true);
    setFocusableWindowState(false);
    setFocusable(false);
    enableInputMethods(false);

现在,当使用机器人类时,我可以通过单击键将事件发送到任何聚焦窗口。 唯一的限制是,它似乎只适用于属于同一个虚拟机的Windows,并且它根本不适用于任何其他系统窗口。

显然,唯一的方法是使用一个JNI层来进行从java到native的转换。 Java没有简单的方法来提供这样的功能。

对于想要学习JNI的人来说,对于一个小型的第三方图书馆来说,这可能是一个有趣的概念......

您是否尝试在使用机器人类之前调用​​本机setfocus()或setactivewindow()函数来移动焦点?

我不知道以独立于操作系统的方式执行此操作的任何方法。 我不知道Windows,但可以通过X协议与X服务器通话。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM