我可以通過下面的說明安裝系統範圍內的鍵盤顯示器內部流程監控鍵盤事件:(過程廣角)
CGEventRef eventCallback(CGEventTapProxy proxy, CGEventType type,
CGEventRef event, void *userData)
{
}
CFMachPortRef eventTap = CGEventTapCreate(kCGHIDEventTap,
kCGHeadInsertEventTap, kCGEventTapOptionDefault,
kCGEventKeyDown,
&eventCallback,
NULL);
if(eventTap)
{
CFRunLoopSourceRef eventRunLoopSourceRef =
CFMachPortCreateRunLoopSource(NULL, eventTap, 0);
CFRelease(eventTap);
CFRunLoopAddSource(CFRunLoopGetCurrent(), eventRunLoopSourceRef,
kCFRunLoopDefaultMode);
CFRelease(eventRunLoopSourceRef);
}
這段代碼的缺點是,它需要在「系統偏好設置激活「全面普及」 「並監視所有進程(我不需要它)。
我想監視我的進程內部的鍵盤事件。它是如何可能的,是否需要激活「通用訪問」?謝謝。
如果我沒有訪問「自我」,會發生什麼?我已經寫了一個注入到其他進程中的dylib,在InDesign這樣的碳應用程序中,我使用Carbon Events並且沒有問題,但是在像TextEdit這樣的可可應用程序中,如何在dylib中使用您的方法? – 2012-07-22 10:36:10
addLocalMonitorForEventsMatchingMask:處理程序:返回一個ID,您需要將它保存在某處,以便稍後可以刪除監視器(使用removeMonitor :)。在我的例子中,我將它作爲一個類的一個屬性,但它不一定是。 – zpasternack 2012-07-22 18:47:16