当前位置: 首页 > 面试题库 >

如何在macOS的Swift中全局检测击键?

卫招
2023-03-14
问题内容

这是我尝试过的:

NSEvent.addGlobalMonitorForEvents(matching: [.keyDown]) { (event) in
    print(event.keyCode)
}

不幸的是,它不打印任何内容。

不,它不是一个重复的这个,这个问题是关于修饰键,我的问题是关于按键。


问题答案:

看起来“重复”标记已被删除,但是我将其汇总到注释部分中的答案也已删除。因此,对于后代:

之所以不起作用,是因为与其他一些事件处理程序相比,.keyDown事件的全局监视器需要更多的权限,包括某些人认为与之重复的事件处理程序。这主要是因为全局.keyDown监视器可以用于恶意目的,例如键盘记录程序。因此,还有其他安全措施可以确保我们合法:

1)您的应用程序需要进行代码签名。

2)您的应用 无需 启用应用沙箱,并且:

3)您的应用需要在“安全性和隐私”首选项窗格中的“辅助功能”下进行注册。

用户必须启用其中的第三个功能,但是您可以使用以下代码朝该方向微调它们:

let options: NSDictionary = [kAXTrustedCheckOptionPrompt.takeUnretainedValue() as String : true]
let accessEnabled = AXIsProcessTrustedWithOptions(options)

if !accessEnabled {
    print("Access Not Enabled")
}

这将提示用户,让他/她可以选择自动打开适当的首选项窗格,在该窗格中,用户可以允许您的应用通过可访问性API来控制计算机,假设您的应用已签名且未沙盒操作,则允许您全局访问.keyDown监视器正常工作。



 类似资料:
  • 问题内容: 我正在尝试使用Carbon的功能为按下命令键时创建一个热键。我这样使用它: 但是,仅使用命令键时不会调用。如果我替换为其他任何非修饰键代码,则将调用处理程序。 有没有人有任何建议可以让应用程序在按下命令键时全局识别?谢谢。 问题答案: 您可以将与事件匹配的“全局事件监控器”添加到视图控制器,以便您可以检查它的modifierFlags与deviceIndependentFlagsMas

  • 问题内容: 我正在尝试在文件中创建如下。 问题是我发现了问题 类型“配置”没有成员“窗口” 请让我知道如何解决该问题。 问题答案: 表示该类中有一个对象,事实并非如此。 您将需要与with 一起使用,但这无济于事,因为此窗口实际上并不代表任何现有的窗口,而且它也不是视图控制器。 因此,我建议您将要使用的实际视图控制器传递给该方法: 然后从可使用UIViewController对象的类中调用它。

  • 问题内容: 我试图设置一个全局变量。就我而言,只是一个布尔标志,用于指示是否首次显示视图: 呈现视图后,我想将此标志设置为false: 然后检查它: 因此,我想创建一个全局变量。在哪里以及如何?我试过了: 在我的视图控制器领域 在我的AppDelegate.swift文件中的方法中 在班上 没运气。我收到一条错误消息 (注意:我意识到,在这个问题中,我背叛了我对Swift中如何处理范围的无知。请原

  • 问题内容: 如何检测何时在应用程序中的任何地方引发了异常? 每当Java桌面应用程序中的任何地方引发异常时,我都会尝试自动发送电子邮件给自己。我认为通过这种方式我可以更加主动。 我知道只要发生异常,我都可以明确地记录日志并通知自己,但是我必须在所有地方都做,而且我可能(很可能会)错过一对夫妇。 有什么建议? 问题答案: 您可能不想在任何例外情况下寄出邮件。JDK中有很多代码实际上依赖于异常才能正常

  • 所以我开始在我的应用程序中为不同的功能设置键,我想知道是否有一种方法可以设置鼠标左键或右键来执行某些操作?我在keycode.java中找不到任何鼠标事件,我不知道如何应用它。 下面是我的代码: 我要完成的是使右键点击你的鼠标按钮停止移动,左键点击再次开始。我该怎么做?谢谢你。

  • 问题内容: 我在Swift中编写了这个简单的太空游戏,直到遇到碰撞检测问题为止。在浏览论坛,教程等之后,我尝试通过声明位掩码来实现冲突,如下所示: 对象1 对象2 我也将打印声明放在 这是我配置精灵的方法: 创造敌人(被召唤进入查看功能) 和另一个精灵 这个是用计时器创建的 不幸的是,当我看到两个对象接触后,它无法在控制台中打印任何内容。 问题答案: 定义唯一的类别,确保您的班级是a ,并使自己成