检测是否有任何鼠标按钮被按下,如果是,是哪一个?

j2qf4p5b  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(412)

基本上,我想查询是否有任何鼠标按钮被按下,如果是,哪一个。问题是我没有使用(持续关注的)ui环境。它意味着能够在后台运行,而操作系统集中在另一个窗口上。我只是设置了一个swing gui,以便于控制。
我怎么能这么做?
(顺便说一句,我正试图在循环中查询它,因此设置事件侦听器不会很有效。)

ix0qys7i

ix0qys7i1#

正如其他人所提到的那样,您需要使用jna才能连接到操作系统本机api。幸运的是,有一个伟大的图书馆,只做了jnativehook。
下面是一些创建全局鼠标侦听器的演示代码:

import GlobalScreen;
import NativeHookException;
import NativeMouseEvent;
import NativeMouseInputListener;

public class GlobalMouseListenerExample implements NativeMouseInputListener {
    public void nativeMouseClicked(NativeMouseEvent e) {
        System.out.println("Mouse Clicked: " + e.getClickCount());
    }

    public void nativeMousePressed(NativeMouseEvent e) {
        System.out.println("Mouse Pressed: " + e.getButton());
    }

    public void nativeMouseReleased(NativeMouseEvent e) {
        System.out.println("Mouse Released: " + e.getButton());
    }

    public void nativeMouseMoved(NativeMouseEvent e) {
        System.out.println("Mouse Moved: " + e.getX() + ", " + e.getY());
    }

    public void nativeMouseDragged(NativeMouseEvent e) {
        System.out.println("Mouse Dragged: " + e.getX() + ", " + e.getY());
    }

    public static void main(String[] args) {
        try {
            GlobalScreen.registerNativeHook();
        }
        catch (NativeHookException ex) {
            System.err.println("There was a problem registering the native hook.");
            System.err.println(ex.getMessage());

            System.exit(1);
        }

        // Construct the example object.
        GlobalMouseListenerExample example = new GlobalMouseListenerExample();

        // Add the appropriate listeners.
        GlobalScreen.addNativeMouseListener(example);
        GlobalScreen.addNativeMouseMotionListener(example);
    }
}

在使用上述库使用swing时,也不要忘记阅读有关线程安全的内容。

相关问题