我正在尝试捕捉Java中的鼠标/按键事件,即使应用程序窗口没有被聚焦。我正在创建一个类似于屏幕记录器的东西,我想通过按一个像“F9”这样的键来停止记录,所以我需要检测事件。这可能吗?有什么类似系统监听器的东西我可以使用吗?
~亨利
这是可能的,但如果注册的组件不在焦点中,标准的Java不能访问按键或鼠标事件。
为了实现这一点,您需要通过Java本机接口(JNI)使用本机代码。这使得Java代码能够调用原生应用程序(特定于某个硬件和操作系统平台的程序)以及用其他语言(如C和C++)编写的库。
幸运的是,有一个第三方库JNativeHook,它正是为您的需要而设计的。您可以在这里找到它:https://github.com/kwhat/jnativehook
如果您使用Maven进行依赖关系管理,那么您可以很容易地安装它。下面是一个工作示例:
App.java
package com.sotest.globalkeylistener;
import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
public class App
{
public static void main(String[] args) {
try {
GlobalScreen.registerNativeHook();
}
catch (NativeHookException ex) {
System.exit(1);
}
GlobalScreen.addNativeKeyListener(new GlobalKeyListener());
}
}
GlobalKeyListener.java
package com.sotest.globalkeylistener;
import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;
public class GlobalKeyListener implements NativeKeyListener {
public void nativeKeyPressed(NativeKeyEvent e) {
System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
if (e.getKeyCode() == NativeKeyEvent.VC_ESCAPE) {
try {
GlobalScreen.unregisterNativeHook();
} catch (NativeHookException e1) {
e1.printStackTrace();
}
}
}
public void nativeKeyReleased(NativeKeyEvent e) {
System.out.println("Key Released: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
}
public void nativeKeyTyped(NativeKeyEvent e) {
System.out.println("Key Typed: " + e.getKeyText(e.getKeyCode()));
}
}
鼠标输出
这样即使你的Java应用程序最小化,你也可以检测到事件。
希望这有帮助。
我想让我的应用程序检测鼠标点击在屏幕上的任何地方,而不必使应用程序聚焦。我想要它检测鼠标事件普遍,即使它最小化。到目前为止,我只能在swing GUI中检测鼠标事件。 Autohotkey可以随时检测鼠标点击并获得鼠标的位置,用Java怎么做到这一点呢?
问题内容: 我敢肯定这是可能的,但是我所有的搜索都空白了。 在Java中,是否可以在Java应用程序之外注册鼠标移动事件?因此,如果鼠标指针移动到屏幕上的任何地方,我都会回电。轮询可能是近似值,但必须有更好的方法。 谢谢 解释用例:它仅用于一个宠物项目,但是基本上是当鼠标击中屏幕边缘时触发事件。我还认为,如果您尝试 超越 屏幕边缘,可能会触发其他事件。为此,我认为鼠标运动侦听器可能更合适。 问题答
问题内容: 是否可以检测到我的应用程序之外屏幕上任何地方的鼠标单击? 我已经用C#编写了一个应用程序来执行此操作,但是我想用Java编写一个该程序的版本,以便它可以在多个平台上运行。 看起来我可以随时获取鼠标的坐标,但是我不确定如何监听鼠标的单击。 在C#中,我曾经检测过是否单击了鼠标按钮,但是如果我希望保持“干净”以便在多个平台上使用,显然就不能使用它。 问题答案: 您只能通过特定平台的OS A
我有一个JavaFX应用程序,我想为场景中任何地方的鼠标单击添加一个事件处理程序。下面的方法可以工作,但不完全按照我想要的方式。这里有一个例子来说明问题: 如果单击空空间中的任何位置,将调用方法,但如果单击,则不会调用方法。在我的应用程序中有许多按钮和其他交互元素,因此我需要一种方法来捕获对这些元素的点击,而不必为每个元素手动添加新的处理程序。
问题内容: 我正在开发JavaFX项目,并且需要类似于表征 “按下并按住”事件的东西 。但是应该将其映射为一个,因为我在Linux上的触摸事件遇到了麻烦。例如,在Ubuntu中,它不会响应触摸事件。 请让我知道,如果你对如何触发一个任何想法 每当 “按住” 在Linux上出现? 问题答案: 只需将a 用作“保持”的计时器即可。如果按下鼠标,则将其启动;如果释放或拖动,则将其停止。
所以我开始在我的应用程序中为不同的功能设置键,我想知道是否有一种方法可以设置鼠标左键或右键来执行某些操作?我在keycode.java中找不到任何鼠标事件,我不知道如何应用它。 下面是我的代码: 我要完成的是使右键点击你的鼠标按钮停止移动,左键点击再次开始。我该怎么做?谢谢你。