如何在Java應用程序中捕獲鼠標,以便Java應用程序看到所有鼠標事件(即使是在應用程序窗口外移動鼠標時發生的事件)?這就像Windows的SetCapture功能。java鼠標捕獲
java鼠標捕獲
回答
你沒有; JVM或更具體的AWT只在Windows發送輸入事件時生成輸入事件,而JVM僅註冊發生在其窗口內的事件。
您可能可以使用JNI將其關閉,但是您可能又不會 - 它將取決於您是否可以掌握底層API所需的信息。由於這可能是一個窗口句柄,因此即使使用JNI,您也不會擁有調用該API所需的內容。
您必須在操作系統級掛鉤鼠標。 Windows(Swing,AWT,MFC等)只知道鼠標在其範圍內的移動。如果您需要一種方法來訪問鼠標的當前位置而不管鼠標在屏幕上的位置,則需要編寫一個輸入鉤子:Input Hooks。然後,您可以使用JNI或從win32控制檯應用程序中讀取STDOUT,該應用程序旨在使用Input Hook將鼠標事件/位置轉發給Java代碼。我在一些用戶界面測試用例中使用了後一種方法,並取得了成功。
我也需要這樣做!
我在搜索網頁後發現它可能使用java.awt.Robot中的moveMouse。
基本上使用機器人將鼠標移動到框架的中心。如果用戶移動它:檢查多少並將其移回中心。
這不需要額外的數據包或JNI(我的演示使用JOGL和vecmath,但這是圖形)。它夠好嗎?試用演示,它的位置:
http://www.eit.se/hb/misc/java/examples/FirstPersonJavaProtoGame/
如果上面的解決方案是不夠的話,或許LWJGL好是你所需要的:
http://www.lwjgl.org/javadoc/org/lwjgl/input/Mouse.html
/亨裏克·比約克曼
只需使用gitHub上提供的系統鉤子庫https://github.com/kristian/system-hook
這個僅適用於appl ❖基於Windows的系統,但實現起來非常簡單。
使用範例
import lc.kra.system.keyboard.GlobalKeyboardHook;
import lc.kra.system.keyboard.event.GlobalKeyAdapter;
import lc.kra.system.keyboard.event.GlobalKeyEvent;
public class GlobalKeyboardExample {
private static boolean run = true;
public static void main(String[] args) {
// might throw a UnsatisfiedLinkError if the native library fails to load or a RuntimeException if hooking fails
GlobalKeyboardHook keyboardHook = new GlobalKeyboardHook();
System.out.println("Global keyboard hook successfully started, press [escape] key to shutdown.");
keyboardHook.addKeyListener(new GlobalKeyAdapter() {
@Override public void keyPressed(GlobalKeyEvent event) {
System.out.println(event);
if(event.getVirtualKeyCode()==GlobalKeyEvent.VK_ESCAPE)
run = false;
}
@Override public void keyReleased(GlobalKeyEvent event) {
System.out.println(event); }
});
try {
while(run) Thread.sleep(128);
} catch(InterruptedException e) { /* nothing to do here */ }
finally { keyboardHook.shutdownHook(); }
}
}
- 1. 捕獲鼠標
- 2. 捕獲(捕獲)Java中的窗口中的鼠標光標
- 3. WinForms鼠標捕獲
- 4. JOGL不捕獲Java鼠標事件
- 5. 捕獲鼠標運動
- 6. ffmpeg gdigrab hidpi鼠標捕獲
- 7. 捕獲鼠標點擊php
- 8. 鼠標捕獲的差異
- 9. 捕獲鼠標事件
- 10. 捕獲鼠標移動SVG
- 11. 拖放鼠標捕獲
- 12. 鼠標移動捕獲
- 13. 在Firefox中捕獲鼠標
- 14. 鼠標移動捕獲(鼠標離開和鼠標輸入)
- 15. 捕獲鼠標光標圖標C++
- 16. java - 從獨立Java應用程序捕獲鼠標事件
- 17. 如何在Java中捕獲鼠標光標?
- 18. Matplotlib捕獲錯誤的鼠標座標
- 19. 如何獲取鼠標捕獲元素
- 20. 誘捕鼠標?
- 21. highcharts:從捕捉鼠標事件,或捕獲鼠標點擊整個圖表上
- 22. 鼠標捕獲後Silverlight鼠標事件丟失了嗎?
- 23. 釋放鼠標捕獲並讓鼠標點擊通過
- 24. 從Java中捕獲鼠標點擊並用作熱鍵?
- 25. 在UserControl中捕獲鼠標點擊
- 26. 在python中捕獲鼠標單擊
- 27. Autohotkey - 捕獲額外鼠標按鈕
- 28. ç詛咒不捕獲鼠標事件
- 29. 當鼠標被捕獲時IsMouseOver
- 30. Caliburn Micro捕獲鼠標位置