كيفية منع صوت صفير إذا تم الضغط على اختصار لوحة المفاتيح العالمية في التطبيق الآخر؟

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

سؤال

ماك OS X 10.6 - الكاكاو

أنا أستخدم شاشة الحدث العالمي لعرض قائمة عنصر الحالة باستخدام اختصار لوحة المفاتيح المخصصة:

globalEventMonitor = [NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *event)
{
    if ([event keyCode] == kVK_F12)
    {
        [self handleGlobalShortcut];
        // How to prevent system beep?
    }
}];
يعمل هذا الحل ولكن النظام يولد صوت صفير في كل مرة عندما يضغط المستخدم f12 و نشيط التطبيق لا يستجيب لهذا الحدث الرئيسي.

هل هناك أي طريقة لمنع تطبيق نشط من تصفيد في كل مرة أستخدم اختصارا عالميا؟

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

المحلول

في شاشة الحدث الخاص بك، تحتاج إلى تنشيط التطبيق الخاص بك حتى هو - هي سوف تتلقى الحدث الرئيسي.

[NSApp activateIgnoringOtherApps:YES];

خلاف ذلك، سيتم تمرير الحدث إلى التطبيق النشط الحالي (الذي سوف يصدر صوتا).

تحرير: يبدو أن هذا لن يعمل.

وفقا للمستندات "لا يمكنك تعديل أو تمنع تسليم الحدث أو بطريقة غير ذلك إلى تطبيقه المستهدف الأصلي".

لذا سنو ليوبارد الجديد addGlobalMonitorForEventsMatchingMask API غير مناسب للتعامل مع المفاتيح الساخنة. سوف تحتاج إلى الاستمرار في استخدام الكربون القديم RegisterEventHotKey API. لحسن الحظ، هذا API متوافق مع كاكاو 64 بت على نمر الثلج.

نصائح أخرى

يبدو مستحيلا. Beeping هو السلوك الافتراضي ل [NSRESPONDER NoreSpondondfor]. لذا تطبيق تصدرجي ما لم يتجاوز هذا السلوك عن طريق إضافة المستجيب الأخير، وهو أمر غير مرجح من خارج التطبيق.

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