मैं कुछ कोड है कि सभी कीबोर्ड और माउस घटनाओं जब पर मैक OSX 10.6 सक्षम को छोड़ देता है लिखने की कोशिश कर रहा हूँ। मेरा कोड रूट उपयोगकर्ता के रूप में चलता है। जिस दृष्टिकोण को मैं ले रहा हूं वह एक ईवेंट टैप बनाना है जो इसे पारित सभी घटनाओं को छोड़ देता है (सक्षम होने पर)। घटना नल कॉलबैक फ़ंक्शन इस तरह दिखता है:मैक घटना नल सिर्फ खारिज कर दिया देरी घटनाओं
CGEventRef MyTapCallback(CGEventTapProxy proxy,
CGEventType type,
CGEventRef event,
void *refcon)
{
return CKeyLocker::isEnabled() ? NULL : event;
}
और कोड मैं सक्षम और घटना नल निष्क्रिय करने के लिए उपयोग कर रहा हूँ इस तरह दिखता है:
void CKeyLocker::enable(bool bEnable)
{
if (bEnable == m_bEnabled)
return;
if (bEnable)
{
// which events are we interested in?
CGEventMask evMask = kCGEventMaskForAllEvents;
CFMachPortRef mp = CGEventTapCreate(kCGHIDEventTap,
kCGHeadInsertEventTap,
kCGEventTapOptionDefault,
evMask,
MyTapCallback,
NULL);
if (mp)
{
qDebug() << "Tap created and active. mp =" << mp;
m_enabledTap = mp;
m_bEnabled = true;
}
}
else
{
CGEventTapEnable(m_enabledTap, false);
CFRelease(m_enabledTap);
m_enabledTap =0;
m_bEnabled = false;
qDebug() << "Tap destroyed and inactive";
}
}
यह दृष्टिकोण काम करता है बहुत अच्छी तरह से है, जबकि घटना नल सक्रिय है - मैं जितना चाहूं कीबोर्ड और माउस पर हथौड़ा लगा सकता हूं और कोई भी घटना सिस्टम के माध्यम से नहीं बनाती है। हालांकि, जब टैप को अक्षम किया गया था तब टैप अक्षम हो गई थी, जबकि वर्तमान विंडो में टैप सक्रिय था। यह घटना नल सिर्फ घटनाओं में देरी कर रहा है, बजाय नष्ट करने के लिए उन्हें, जो अजीब है की तरह है के बाद से मैक प्रलेखन स्पष्ट रूप से कहा गया है: घटना नल एक सक्रिय फिल्टर है
हैं, तो आपके कॉलबैक फ़ंक्शन में से एक वापस आ जाएगी निम्नलिखित:।
(संभवतः संशोधित) घटना है कि में पारित हो जाता है इस घटना को वापस घटना प्रणाली को पारित कर दिया है।
एक नव निर्मित कार्यक्रम। नई घटना को घटना प्रणाली में वापस भेज दिए जाने के बाद, नई घटना मूल घटना के साथ जारी की जाएगी।
शून्य अगर घटना में पारित हटाया जाने वाला है।
मैं वापस लौट रहा हूं, लेकिन घटना को हटाया नहीं जा रहा है। कोई विचार?
आप इस समस्या को हल किया? मैंने अभी भी वही व्यवहार किया है। – Dan
नहीं, दुर्भाग्य से नहीं। – Thomi
यह भी देखें http://stackoverflow.com/questions/4518559/consuming-osx-mouse-trackpad-events-with-an-event-tap – James