Swift 中的全局修饰键按下检测

2024-01-09

我正在尝试使用Carbon的功能RegisterEventHotKey创建按下命令键时的热键。我这样使用它:

InstallEventHandler(GetApplicationEventTarget(), handler, 1, &eventType, nil, nil)
RegisterEventHotKey(UInt32(cmdKey), 0, hotKeyID, GetApplicationEventTarget(), 0, &hotKeyRef)

但是,它不调用handler当我只使用命令键时。如果我替换,则调用处理程序cmdKey与任何其他非修饰键代码。

有谁有任何建议可以让应用程序在按下命令键时全局识别?谢谢。


您可以添加事件匹配的全局监视器.flagsChanged到你的视图控制器,这样你就可以检查它的modifierFlags与deviceIndependentFlagsMask的交集并检查结果键。

宣言

class func addGlobalMonitorForEvents(matching mask: NSEventMask, handler block: @escaping (NSEvent) -> Void) -> Any?

安装一个事件监视器,用于接收发布到的事件副本 其他应用程序。事件异步传送到您的应用程序 并且您只能观察事件;您不能修改或以其他方式 阻止事件传递到其原始目标 应用。仅当可访问性时才可以监视与按键相关的事件 已启用,或者您的应用程序是否受信任可访问 (请参阅 AXIsProcessTrusted() https://stackoverflow.com/a/58405058/2303865)。请注意,您的处理程序不会被调用 对于发送到您自己的应用程序的事件。

import Cocoa
class ViewController: NSViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        NSEvent.addGlobalMonitorForEvents(matching: .flagsChanged) {
            switch $0.modifierFlags.intersection(.deviceIndependentFlagsMask) {
            case [.shift]:
                print("shift key is pressed")
            case [.control]:
                print("control key is pressed")
            case [.option] :
                print("option key is pressed")
            case [.command]:
                print("Command key is pressed")
            case [.control, .shift]:
                print("control-shift keys are pressed")
            case [.option, .shift]:
                print("option-shift keys are pressed")
            case [.command, .shift]:
                print("command-shift keys are pressed")
            case [.control, .option]:
                print("control-option keys are pressed")
            case [.control, .command]:
                print("control-command keys are pressed")
            case [.option, .command]:
                print("option-command keys are pressed")
            case [.shift, .control, .option]:
                print("shift-control-option keys are pressed")
            case [.shift, .control, .command]:
                print("shift-control-command keys are pressed")
            case [.control, .option, .command]:
                print("control-option-command keys are pressed")
            case [.shift, .command, .option]:
                print("shift-command-option keys are pressed")
            case [.shift, .control, .option, .command]:
                print("shift-control-option-command keys are pressed")
            default:
                print("no modifier keys are pressed")
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 中的全局修饰键按下检测 的相关文章

  • 如何在 iOS 上压缩 Realm DB?

    我想定期压缩 iOS 上的 Realm 实例以回收空间 我认为该过程是将数据库复制到临时位置 然后将其复制回来并使用新的default realm 文件 我的问题是Realm 其行为就像单例并回收对象 因此我无法真正关闭它并告诉它打开新的
  • Swift 中的“funcobserveValueForKeyPath(keyPath:NSString,object:AnyObject,change:NSDictionary,context:Void)”问题

    我已经为 AVPlayer 添加了一个观察者 如下所示 self audioPlayer addObserver self forKeyPath currentItem status options NSKeyValueObservingO
  • iOS8 CoreData“使用未实现的初始化程序”

    我尝试运行我的应用程序时收到以下错误 致命错误 对类 rcresttest CatalogItem 使用未实现的初始化程序 init entity insertIntoManagedObjectContext 我可以通过将数据模型中的实体类
  • 检查定位服务是否开启

    我一直在对 CoreLocation 进行一些研究 最近 我遇到了一个在其他地方 但在 Objective C 和 iOS 8 中 已经讨论过的问题 我觉得问这个问题有点傻 但是如何在 iOS 9 上使用 swift 检查是否启用了位置服务
  • 带闭包的默认属性值使编译器重新编译所有文件

    This source https developer apple com library content documentation Swift Conceptual Swift Programming Language Initiali
  • NSSharingService 共享子菜单

    如何在 Mac 应用程序中添加共享子菜单 例如 Safari gt 文件 gt 共享 我戳了戳Apple 共享服务示例代码 http developer apple com library mac samplecode SharingSer
  • 强制 Apache HTTPD 以 32 位运行

    我通过从二进制文件 以及 ppc 部分 中剥离 32 位架构 以 64 位模式运行 Apache HTTPD 我这样做是为了使其与 python 和 mysql 更加兼容 然而 我有另一台机器需要它以 32 位模式运行 它仍然保留所有四种原
  • 如何在 SwiftUI 中仅使用 ForEach 而不是列表来滑动删除

    我正在 SwiftUI 中使用 ForEach 制作自定义列表 我的目标是进行滑动删除手势 而不是将 ForEach 嵌入到列表中 到目前为止 这是我的代码 import SwiftUI struct ContentView View le
  • 如何使用 NSUserDefaults 在 Swift 中存储自定义类的数组?

    我有一个名为的自定义类Person当某人输入信息时 它会存储有关某人的各种属性 class Person Person dictionary variable var name String var age String var html
  • 在 OS X 上创建和使用静态库

    好的 我正在尝试创建一个 Cocoa 库 静态 并使用 但我不断收到错误 我创建了一个超基本的静态库 TSXLib 其中仅包含一个额外的类 import
  • Swift:使具有相同“形状”的两种类型符合通用协议

    我有两种不同的类型 它们代表相同的数据 并且具有完全相同的 形状 这两种不同的类型是代码生成的 我被迫处理它们 但是 我想让它们符合一个通用的协议 这样我就可以对这两种类型一视同仁 这是一个例子 假设这是我所坚持的两种代码生成类型 stru
  • 作为!与 Swift 中 Xcode 6.3 中的 as 运算符对比

    Xcode 6 3 使 Swift 发生了很大变化 我必须更换每个应用程序中的数十个位置as gt as 为什么 现在有什么规则 在 Swift 1 2 之前 as运算符可用于执行两种不同类型的转换 具体取决于要转换的表达式的类型及其要转换
  • 根据 iOS 版本使用不同的类实现?

    iOS 11 最近添加了一个我想使用的新功能 但我仍然需要支持旧版本的 iOS 有没有一种方法可以将同一个类编写两次 并让较新版本的 iOS 使用该类的一个版本 而旧版本的 iOS 使用另一个版本 注 最初我用的是if available
  • 什么是 WKWebView 中的 WKErrorDomain 错误 4

    fatal error LPWebView encounters an error Error Domain WKErrorDomain Code 4 A JavaScript exception occurred UserInfo 0x7
  • 将 UIToolBar 添加到所有键盘(swift)

    我正在尝试以尽可能少的重复次数将自定义 UIToolBar 添加到我的所有键盘中 我目前的做法要求我将代码添加到所有 viewDidLoads 中 并将每个文本字段的委托分配给我正在使用的 viewController 我尝试创建自己的 U
  • 从未调用过交互式委托方法

    我想在 ViewController 1 和 NavigationViewController 2 之间进行交互式转换 NavigationController 通过按钮调用 因此呈现时没有交互转换 它可以通过按钮或 UIPanGestur
  • Swift:设置协议的可选属性

    如何设置协议的可选属性 例如 UITextInputTraits 有许多可选的读 写属性 当我尝试以下操作时 出现编译错误 无法分配给 textInputTraits 中的 keyboardType func initializeTextI
  • 我的 UICollectionView 无法使用 Swift 平滑滚动

    我有一个CollectionView它使单元出队取决于message类型 例如 文本 图像 我遇到的问题是当我向上 向下滚动时滚动确实很不稳定 因此用户体验不是很好 这仅在第一次加载单元格时发生 之后滚动就会平滑 我有什么想法可以解决这个问
  • SwiftUI:隐藏键盘但显示光标

    我想使用自定义按钮将文本输入到TextField 但仍显示并移动光标 有没有办法隐藏默认键盘 同时仍然显示光标 我希望有这样的事情 TextField text text keyboardType none 这是它目前的样子 您可以使用UI
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的

随机推荐

  • 重复排列:避免溢出

    背景 Given n球使得 a balls are of colour GREEN b balls are of colour BLUE c balls are of colour RED 当然a b c n 这些球可以排列的排列数量由下式
  • 如果只需要结果的低位部分,可以使用哪种 2 的补码整数运算而无需将输入中的高位清零?

    在汇编编程中 想要从寄存器的低位计算某些内容是相当常见的 但不能保证其他位清零 在 C 等高级语言中 您只需将输入转换为小尺寸 然后让编译器决定是否需要分别将每个输入的高位清零 或者是否可以在事实 This is especially co
  • CUDA 素数生成器性能低下

    我正在用 CUDA 编写我的第一个程序 它是一个素数生成器 它可以工作 但只比同等的单线程 C 代码快 50 CPU版本100 使用一个核心 GPU版本仅使用20 的GPU CPU 是 i5 2310 GPU是GF104 如何提高该算法的性
  • IIS7.5 max-age问题(asp.net mvc输出缓存)

    我们使用Windows Server 2008 R2 Enterprise和IIS7 5 7600 16385 我在服务器上部署了一个简单的Web asp net mvc c net Framework 4 5 1 如下所示的控制器 并且
  • 使用 msbuild 进行构建并动态设置项目引用

    我有几个引用 SQL Server 程序集的项目 对于 SQL Server 2005 和 SQL Server 2008 我当前维护 2 个项目文件 它们指向相同的源文件 唯一的区别是对 SQL Server 程序集的引用 有没有一种方法
  • 如何使用带有代理的discord python bot?

    需要使用带有代理的discord bot https 或socks 例如 代理为 192 168 1 1 3125 代理授权为 proxy login proxy pass 我已经尝试过这个例子 如何通过代理连接不和谐机器人 https s
  • 具有drive.file范围的更改源的预期行为是什么?

    我的期望是 如果我查询范围为drive file 的更改源 我将仅收到对我的应用程序拥有的文件的更改 然而 在我所做的测试中 我发现提要中的文件与我的应用程序无关 至少其中一些是与我共享的文件 有人确切知道这应该如何工作吗 Edit 0 类
  • 如果“mousemove”和“click”事件同时触发怎么办?

    不知道是否只是Chrome问题 现在无法检查 但是让我们尝试下面的代码 我们将两个事件绑定到某个元素 div on mousemove function e console log move click function e console
  • Windows cmd - 使用 oneliner 与用户输入提示 [npm] 交互

    我正在尝试将输入作为一行传递给用户输入提示 但很难弄清楚如何正确执行此操作 具体来说 我正在尝试使用登录到 npmnpm adduser npm login是它的别名 当它是一个奇异值时 它可以工作 但这只能让我到目前为止 echo exa
  • SiteCatalyst:跟踪 Webkit 浏览器上的自定义链接

    我的查询是我有一个重定向到另一个页面的链接 在 webkit 浏览器中 如何强制 sitecatalyst 服务器调用 脚本执行 在重定向发生之前完成 我正在使用 sitecatalyst 作为门户 我有 配置自定义链接调用以包含 didA
  • 在可选参数中设置日期时间的默认值[重复]

    这个问题在这里已经有答案了 如何在可选参数中设置日期时间的默认值 public SomeClassInit Guid docId DateTime addedOn DateTime Now Init codes here 有一个解决方法 利
  • 如何在一行内遍历这个哈希值?

    哈希中的每个键都有一个值 该值也是哈希 100 gt 1 gt ruby 2 gt enumerables 50 gt 3 gt can 4 gt cause 15 gt 5 gt occassional 6 gt insanity 对于每
  • 正确关闭数据库连接 - VBScript + MS SQL

    我有一个连接到 SQL 服务器的经典 ASP vbscript Web 应用程序 在某些页面上 我打开多个数据库连接来提取数据 我的问题是 是在每个页面底部添加关闭连接功能更好 还是在使用后立即显式关闭连接更好 请记住 在这些特定页面上 每
  • Java 单元测试:替换被测私有方法

    运行 JUnit 测试时是否有任何方法可以替换私有方法中的逻辑 一些背景知识 我们有一些与 OSGi 容器内的包交互的私有方法 这在单元测试中不可用 因此该方法将失败 我们已经研究过 JMockIt 但方法替换功能似乎想要强制您替换类中相互
  • 线性渐变还需要浏览器前缀吗? [复制]

    这个问题在这里已经有答案了 我是否仍然需要使用线性渐变属性的浏览器前缀 background image webkit linear gradient top 2F2727 1a82f7 background image moz linea
  • 检查文件是否在 Delphi 中打开

    有没有办法检查文件是否已被 Delphi 中的 ReWrite 打开 代码会是这样的 AssignFile textfile somefile txt if not textFile IsOpen then Rewrite textFile
  • “类型对象指针”和“同步块索引”中存储了什么样的数据?

    在 CLR 中 每个实例都有 2 个附加字段来存储一些数据来管理对象 类型对象指针 同步块索引 您能否简单解释一下它们内部存储的内容以及 CLR 如何使用它们 Thanks 类型对象指针是指向对象类型描述的指针 这用于找出对象的实际类型是什
  • Pandas 在多列上应用元组解包函数

    Given a function它接受多个参数并返回多个值 如下所示 def tuple unpack value another value does some interesting stuff return value another
  • 动态更改 angular2-query-builder 中的配置

    在这里 我尝试根据 Angular2 query builder 中的字段值更改运算符 我的 TS 文件 Component selector my app template div h2 Hello name h2 div
  • Swift 中的全局修饰键按下检测

    我正在尝试使用Carbon的功能RegisterEventHotKey创建按下命令键时的热键 我这样使用它 InstallEventHandler GetApplicationEventTarget handler 1 eventType