2009-04-29 50 views
17

Tôi đã tìm kiếm một lúc và mọi người dường như nghĩ rằng điều này là không thể sử dụng chỉ Java, vì vậy tôi sẽ cung cấp cho SO một shot;)Trình xử lý sự kiện trong Java mà không có ứng dụng nào có tiêu điểm? (Global keypress detection)

Có cách nào để có Java của tôi ứng dụng lắng nghe các sự kiện (các sự kiện quan trọng đặc biệt) trong khi một ứng dụng không liên quan khác có tiêu điểm cửa sổ? Trong tình huống của tôi, tôi đang tìm cách phát hiện khi người dùng nhấn phím 'Tạm dừng' trên bàn phím mặc dù ứng dụng Java của tôi không có tiêu điểm.

Tôi đã nghe một số người đề cập rằng cách duy nhất là viết một số mã C và sử dụng JNI. Chỉ cần tò mò nếu có ai biết cách để tránh điều đó? Hoặc, nếu không, ít nhất là một hướng dẫn thực sự tốt đẹp về các công cụ c/JNI?

Cảm ơn

Trả lời

10

Tôi hiểu rằng điều này không thể thực hiện được. Ở mức cơ bản, JVM chỉ tạo ra các sự kiện cho các sự kiện O/S mà nó nhận được, và nó chỉ nhận các sự kiện đầu vào O/S khi nó có tiêu điểm.

Tôi chắc chắn bạn có thể sử dụng JNI để kích hoạt O/S để tạo sự kiện cho tất cả đầu vào, nhưng điều đó sẽ rất phụ thuộc vào O/S.

+1

1. Tôi sẽ rất ngạc nhiên nếu có một cách để làm điều này mà không có JNI hoặc một số truy cập khác bên ngoài JVM. – Eddie

+0

Bạn có thể sử dụng các lớp từ gói com.melloware.jintellitype. Hơn bạn có thể capcure Key đầu vào tất cả các thời gian. Nhưng bạn cần thêm một số tệp .dll cho các hàm gốc. – kajacx

3

Tôi cũng không biết cách nào để giải quyết vấn đề đó. Tôi đã tìm thấy this link on Java's forums với một ví dụ tốt về cách thiết lập các công cụ JNI và tạo một trình xử lý bàn phím chung (quá nhiều để thêm ở đây). Đó là một chút ngày (2005), nhưng ví dụ trông đủ kỹ lưỡng để giúp bạn bắt đầu.

13

Dưới đây là câu trả lời tốt nhất mà tôi đã tìm thấy:

" Có một thư viện để xử lý bàn phím có nguồn gốc và kiểm soát chuột: https://github.com/kwhat/jnativehook) "

+0

Nhưng không thể tìm thấy nó cho Maven: ( –

+0

dưới jnativehook com.1stleg của nó trên maven. –

Các vấn đề liên quan