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

Detect if any mouse button is being pressed, and if so, which one?

基本上,我想查询是否有任何鼠标按钮被按下,如果有,是哪一个。 问题是我没有使用(持续关注的)UI 环境。它意味着能够 运行 在后台,而 OS 专注于另一个 window。我只是设置了一个 Swing GUI 以便于控制。

我该怎么做?

(顺便说一句,我试图在循环内查询它,因此设置事件侦听器效率不高。)

如其他人所述,您需要使用 JNA 才能连接到操作系统本机 API。幸运的是,有一个很棒的图书馆可以做到这一点 jnativehook

这是一些创建 Global Mouse Listener:

的演示代码
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);
    }
}

另外,当Working with Swing 使用提到的库时,不要忘记阅读有关线程安全的内容。