[英]JavaFX: How to detect mouse/key events anywhere on screen?
我正在嘗試在 Java(fx) 中捕獲鼠標/鍵事件,即使應用程序窗口沒有聚焦......我正在創建類似屏幕記錄器的東西,我想通過按“F9”之類的鍵來停止錄制" ,所以我需要檢測事件。 這可能嗎? 有沒有我可以使用的系統監聽器之類的東西?
~亨利
如果注冊的組件不在焦點上,這是可能的,但標准 Java 無法訪問按鍵或鼠標事件。
為了實現這一點,您需要通過Java 本機接口 (JNI)使用本機代碼。 這使 Java 代碼能夠調用本機應用程序(特定於硬件和操作系統平台的程序)和用其他語言(如 C 和 C++)編寫的庫。
幸運的是,有一個第三方庫JNativeHook專為您的需要而設計。 你可以在這里找到它: https : //github.com/kwhat/jnativehook
如果您使用 Maven 進行依賴管理,您可以輕松安裝它。 這是一個工作示例:
應用程序.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());
}
}
全局鍵監聽器
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 應用程序被最小化,您也可以檢測到事件。
希望這會有所幫助。
不幸的是,您不能這樣做。 JavaFX 需要一個聚焦窗口。 沒有簡單的方法可以使用 Java 實現您想要的目標,因為出於安全目的,它使您幾乎無法控制操作系統。 最好的辦法是編寫一個 C 應用程序來執行此操作,然后使用 JNI 從 Java 中掛鈎到它。
你會想做兩件事。
編寫一個 C 程序來偵聽操作系統上的全局事件。 對於 Windows,您可以在 MSDN 上找到有關此內容的更多信息,對於 mac 和 linux,您將需要使用 X11 庫。
使用 JNI 在 Java 中鏈接您的 C 代碼。 這並不像聽起來那么難,這里有一個很好的教程: https : //www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html
當然,你不必自己做所有的工作,那里有幾乎所有東西的庫。 這個庫為你完成了艱苦的工作,你可以用它來實現你的目標: https : //github.com/kwhat/jnativehook
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.