如何将按键事件转移到以下窗口

时间:2018-07-05 10:36:24

标签: swift cocoa

我为我的应用程序禁用了菜单栏,因此当打开窗口时,左上方没有菜单。现在我要执行以下操作:

例如:

当我的窗口位于“ Chrome”窗口的前面时,然后当我将焦点放在窗口上时,菜单栏仍显示“ Chrome”的菜单。现在,当我激活窗口时,我想将快捷事件转移到Chrome,我试图输入“ command + Q”,但是它没有任何作用。那么我该如何务实地做到这一点?

 monitor = NSEvent.addGlobalMonitorForEvents(matching: mask, handler: handler)

1 个答案:

答案 0 :(得分:0)

我认为这对用户使用您的应用存在安全风险。您可以在不通知用户的情况下监视任何按键输入(密码)。使用沙盒应用程序,将很难对其进行存档,但是我知道可行的一种方法是使用Apple Script转发事件,如以下示例所示。这也可以与ScriptingBridge或Accessibility框架一起使用,但是我自己没有使用它。当然,您首先必须要问窗口服务器当前在应用程序下方的屏幕(窗口索引,框架)上可以看到哪个应用程序(窗口)。

使用Apple脚本发送击键:

 tell application "Firefox" 
   activate 
 end tell 
 delay 1 
 tell application "System Events" 
   keystroke "l" using {command down} 
   set the clipboard to ("[@URL]") 
   keystroke "v" using {command down} 
   keystroke return 
 end tell 

获取窗口列表:

let options = CGWindowListOption(arrayLiteral: CGWindowListOption.excludeDesktopElements, CGWindowListOption.optionOnScreenOnly)
    let windowListInfo = CGWindowListCopyWindowInfo(options, CGWindowID(0))
    let infoList = windowListInfo as NSArray? as? [[String: AnyObject]]