Macos 如何在OSX中拦截来自特定窗口的事件
我希望具有以下工作流:Macos 如何在OSX中拦截来自特定窗口的事件,macos,events,nswindow,nsevent,cgeventtap,Macos,Events,Nswindow,Nsevent,Cgeventtap,我希望具有以下工作流: 用户按下热键或状态栏菜单按钮 用户单击窗口 窗口现在已在我的应用程序中“注册” 应用程序从所有注册的窗口截获鼠标事件 我读了很多关于CGEvents、CGEventTaps和NSEvents的文章。我可以使用CGEvents和CGEventTaps截获全局事件并发布新事件,但在NSEvent中没有windowNumber之类的窗口信息,只有PSD(我不知道如何使用这些),因此我无法从未注册的窗口中过滤出事件。另一方面,NSEvent不允许我截获全局事件,只允许通过lo
- 用户按下热键或状态栏菜单按钮
- 用户单击窗口
- 窗口现在已在我的应用程序中“注册”
- 应用程序从所有注册的窗口截获鼠标事件
如何实现所需的功能?您可以使用Mac OS X辅助功能API获取有关当前关注的窗口或应用程序的详细信息 本文给出了许多例子
// 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:ofielment:
在应用程序中“注册”窗口/应用程序时获取该窗口/应用程序
当出现CGEvent
时,将当前关注的窗口/应用程序与已注册的窗口/应用程序列表进行比较,以确定是否应拦截该事件