如何在基于 swift 的 macOS 应用程序中检查“输入监控”权限的状态?

问题描述 投票:0回答:1

如何查看我的应用程序在基于 Swift 的 macOS 应用程序中是否具有“输入监控”权限?这适用于 macOS Ventura+。

enter image description here

在 macOS 的早期版本中,我认为此权限与辅助权限捆绑在一起,我可以使用

AXIsProcessTrusted()
AXIsProcessTrustedWithOptions(options as CFDictionary?)
进行查询。如果我的应用程序在辅助功能菜单中启用(见下文),这仍然返回 true,但我无法具体看到输入监控状态。

enter image description here

是否有人知道会公开输入监控状态的 API,或用于确定是否已授予访问权限的任何其他技术?

swift macos macos-ventura macos-sequoia
1个回答
0
投票

按照@Willeke的评论,使用

IOHIDCheckAccess
来测试“输入监控”状态:

 IOHIDCheckAccess(kIOHIDRequestTypeListenEvent)

这将返回以下内容之一

IOHIDAccessType

IOHIDAccessType(rawValue: 2) kIOHIDAccessTypeUnknown

IOHIDAccessType(rawValue: 1) kIOHIDAccessTypeDenied

IOHIDAccessType(rawValue: 0) kIOHIDAccessTypeGranted

请注意,还有...

IOHIDCheckAccess(kIOHIDRequestTypePostEvent)

与发布事件相关并显示在“辅助功能”权限中。它包括 Listen 类型,检查

...ListenEvent
将返回
...Granted
,但授予时您的应用程序不会列在“输入监控”中。 因此,您必须首先检查 PostEvent,然后检查 ListenEvent 以了解您是否只有侦听访问权限。

© www.soinside.com 2019 - 2024. All rights reserved.