Java 實現系統全域性快捷鍵繫結

Peiwen123發表於2020-10-02

希望實現一個功能,當檢測到使用者按下某個快捷鍵的時候響應做一些操作,希望能繫結系統全域性快捷鍵,隨時隨地響應快捷鍵;

找到了2個實現方案:

  1. 通過jkeymaster
    先maven匯入:
        <!-- https://mvnrepository.com/artifact/com.github.tulskiy/jkeymaster -->
        <dependency>
            <groupId>com.github.tulskiy</groupId>
            <artifactId>jkeymaster</artifactId>
            <version>1.3</version>
        </dependency>

demo如下:

// 用swing的queue
Provider provider = Provider.getCurrentProvider(true);
// 繫結快捷鍵
provider.register(KeyStroke.getKeyStroke(KeyEvent.VK_D, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
        x-> System.out.println(x));

這裡就是繫結了快捷鍵cmd+D,每次按下快捷鍵都會列印出來按鍵資訊;
這裡有個坑,在mac下如果要繫結command相關的快捷鍵,要用Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()方法,KeyEvent裡沒有直接能用的command,如果是windows可以直接在KeyEvent裡面找要繫結的按鍵,比如ctrl,alt這些都有;

  1. 通過jnativehook
    先maven匯入:
        <!-- https://mvnrepository.com/artifact/com.1stleg/jnativehook -->
        <dependency>
            <groupId>com.1stleg</groupId>
            <artifactId>jnativehook</artifactId>
            <version>2.1.0</version>
        </dependency>

這個jnativehook的原理不是去系統全域性註冊快捷鍵,而是監聽系統的所有滑鼠,鍵盤,滾輪行為,當你監聽到有自己希望觸發的場景時,可以再做對應的操作;

相關文章