إرسال الحدث لوحة المفاتيح من جافا إلى أي تطبيق (على الشاشة لوحة المفاتيح)

StackOverflow https://stackoverflow.com/questions/156912

سؤال

وأنا أعمل على تطوير لوحة مفاتيح على الشاشة مع جافا. لوحة المفاتيح هذه لديه JComponent عن كل مفتاح ممكن. عندما تم الكشف عن أسفل الماوس على الزر، أريد أن إرسال رمز لوحة المفاتيح الخاصة بتطبيق حاليا على التركيز. لوحة المفاتيح نفسها على مسافة JFrame بدون زخارف وتعيين إلى دائما على اساس أعلى.

ولقد وجدت أن الطبقة روبوت يمكن استخدامها لمحاكاة هذه الأحداث لوحة المفاتيح على قائمة الانتظار الأصلي. ومع ذلك، في هذه الحالة، واختيار JComponent يعني أن مفتاح الصحافة استلام على JFrame، وأود أن لا تكون قادرة على الحصول عليها في التطبيق الآخر

وكيف يمكن أن أحافظ على بلدي على الشاشة لوحة المفاتيح "دائما دون التركيز"؟ هو ربما من الممكن استخدام طريقة أخرى لإرسال مفتاح الصحافة؟

هل كانت مفيدة؟

المحلول 3

ويبدو أن الطريقة الوحيدة للقيام بذلك هو أن تكون طبقة JNI من شأنها أن تجعل التحويل من جافا إلى الأم. جافا لا يوجد طريقة سهلة لتوفير مثل هذا funcionality.

وهذا يمكن أن يكون مفهوم مثير للاهتمام لمكتبة حزب الصغيرة، والثالثة للشخص الذي يريد أن يتعلم JNI ...

نصائح أخرى

ولقد وجدت jnativehook عندما كنت في محاولة للسيطرة على gamebot مع لوحة المفاتيح الفعلية والأوامر الماوس (على أن تكون أكثر "مثل الإنسان").

والحل الوحيد الذي يمكن أن تجد حتى الآن، هو جعل كل مفتاح على JComponent (لذلك لا يمكن أن يكون التركيز)، وتعيين الخصائص التالية على JFrame:

    setUndecorated(true);
    setFocusableWindowState(false);
    setFocusable(false);
    enableInputMethods(false);

والآن عندما باستخدام فئة الروبوت يمكنني إرسال الأحداث إلى أي إطار التركيز من خلال النقر على المفاتيح. والقيد الوحيد، هو أنه يبدو فقط للعمل للنوافذ التي تنتمي إلى نفس الجهاز الظاهري، وأنها لا تعمل على الإطلاق مع أي نافذة نظام آخر.

هل حاولت الاتصال setfocus الأم () أو setactivewindow () لنقل التركيز قبل استخدام الطبقة الروبوت؟

وأنا لست على علم بأي طريقة للقيام بذلك في نظام التشغيل بطريقة مستقلة. أنا لا أعرف عن ويندوز، ولكن سيكون من الكلام ممكن مع X الملقم عبر بروتوكول X.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top