سؤال

هل هناك طريقة للتسجيل في فعاليات نقل الماوس العالمي في Cocoa؟لقد تمكنت من التسجيل في الأحداث باستخدام Carbon's InstallEventHandler(), ، ولكن يفضل ما يعادلها من الكاكاو.لقد بحثت عن NSNotificationCenter الأحداث، ولكن لا يبدو أن هناك أي أسماء أحداث عامة (هل هناك أسماء خاصة؟)

وبدلا من ذلك، هل هناك طريقة للاستخدام NSTrackingArea للمشاهدات مع أ clearColor خلفية؟

التطبيق سنو ليوبارد فقط.

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

المحلول

في SnowLeopard هناك أسلوب فئة جديدة على NSEvent التي لا بالضبط ما تريد: + (id)addGlobalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(void (^)(NSEvent*))block. فأنت تريد mask = NSMouseMovedMask.

نصائح أخرى

تم طرح سؤال مماثل بالفعل على StackOverflow:كيفية جعل فئة فرعية شفافة من NSView تتعامل مع أحداث الماوس؟

للتلخيص، لم تنجح طريقة العرض الشفافة.يبدو أن "صنابير حدث الكوارتز" هي أفضل إجابة.

فيما يلي بعض التلميحات حول العمل باستخدام الصنابير:

  1. قم بإنشاء الصنبور باستخدام CGEventTapCreate.
    أ) بالنسبة لمعلمة الموقع (الأولى) التي قد ترغب في استخدامها kCGSessionEventTap.
    ب) بالنسبة لمعلمة الموضع (الثانية) التي ربما تريدها kCGHeadInsertEventTap.
    ج) بالنسبة لمعلمة قناع الحدث، حاول (1 << kCGEventMouseMoved).

  2. قم بإنشاء مصدر حلقة تشغيل باستخدام CFMachPortCreateRunLoopSource, ، بتمرير ضغطة الحدث كمعلمة ثانية.

  3. أضف مصدر حلقة التشغيل إلى حلقة التشغيل الخاصة بك.بافتراض أنك تريد إضافتها إلى حلقة التشغيل الرئيسية، قم بما يلي:CFRunLoopAddSource(CFRunLoopGetMain(), sourceFromStep2, kCFRunLoopDefaultMode);

  4. تمكين الحدث اضغط مع CGEventTapEnable

إذا كنت تريد أن تتبع الماوس لا يهم أين هو، وكنت ترغب في CGEventTap. ليس هناك ما يعادلها الكاكاو. إذا كنت ترغب فقط في تتبع ذلك في التطبيق الخاص بك، ثم يجب أن يفسر لماذا كنت تجد نفسك غير قادر على القيام بذلك قليلا أكثر شمولا.

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