كيفية محاكاة مفاتيح منخفض المستوى على OS X؟
-
20-09-2019 - |
سؤال
أحاول إنشاء Keydown Keydown و KeyUP أحداثًا برمجيًا. أنا أستخدم حاليًا CGPostKeyboardEvent للقيام بذلك ، لكنني أبحث عن طريقة للقيام بذلك على مستوى أقل. لقد نظرت إلى ddhidlib لكنني لم أستطع معرفة طريقة لإنشاء حدث مزيف. هل أستطيع مساعدتك؟
تحديث: بفضل نصيحة Weichsel ، أقوم الآن بإنشاء حدث مفتاح مع ما يلي:
CGEventRef e = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)52, true);
CGEventPost(kCGSessionEventTap, e);
CFRelease(e);
الذي وجدته هنا.
لكن, ، مشكلتي لا تزال قائمة ، لذا سأوضح قليلاً. التطبيق (الطرف الثالث) الذي أود إرسال keypresses إلى الأدوات ddhidlib's وظيفة التقاط المفتاح:
- (void) ddhidKeyboard: (DDHidKeyboard *) keyboard
keyDown: (unsigned) usageId;
وهذا لا يسمى أبدًا باستخدام الطريقة الحالية. أظن أن المفتاح الذي يتم محاكاته باستخدام cgeventcreatekeyboardevent هو أعلى من مستوى لا يمكن التقاطه بواسطة ddhidkeyboard: keydown. لذا فإن ما أحاول القيام به هو إنشاء حدث KeyDown على مستوى منخفض بما فيه الكفاية بحيث يتم التعرف عليه بواسطة DDHIDKeyboard: KeyDown.
المحلول
ما الخطأ في خدمات الأحداث الكوارتز؟
أعتقد أنك على المسار الصحيح ، ولكن يجب أن تستخدم CGEventCreateKeyboardEvent
بدلاً من CGPostKeyboardEvent
لأن هذا الأخير تم إهماله منذ Mac OS X 10.6.
نصائح أخرى
يمكن أن تضخ صنابير الأحداث على مستوى HID إذا قمت بتشغيل الجذر