我想拥有以下工作流程:
我在CGEvents,CGEventTaps和NSEvents上阅读了很多内容。我可以使用CGEvents和CGEventTaps拦截全局事件并发布新事件,但是在NSEvent中没有像windowNumber这样的窗口信息,只有PSD(我不知道如何使用它们),所以我无法过滤非事件注册的窗户。另一方面,NSEvent不允许我通过localMonitor拦截全局事件,只拦截本地事件。
我怎样才能实现所需的功能?
答案 0 :(得分:0)
您可以使用Mac OS X辅助功能API获取有关当前关注窗口或应用程序的详细信息。
UIElementInspector Apple Sample Code给出了很多例子。
// Given a uiElement and its attribute, return the value of an accessibility object's attribute.
+ (id)valueOfAttribute:(NSString *)attribute ofUIElement:(AXUIElementRef)element;
使用kAXFocusedApplicationAttribute
kAXFocusedWindowAttribute
属性与valueOfAttribute:ofUIElement:
一起使用,以便在您的应用“注册”时获取窗口/应用。
当CGEvent
进来时,将当前关注的窗口/应用程序与已注册的窗口/应用程序列表进行比较,以确定是否应拦截该事件。