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

如何在OS X应用程序中使用Swift监听全局热键?

单淳
2023-03-14
问题内容

我试图在我的Mac OS
X应用程序中使用处理程序以Swift编写一个全局(系统级)热键组合,但我只是找不到适合的文档。我已经读到我必须弄乱一些旧版Carbon
API,有没有更好的方法?您能告诉我一些概念证明Swift代码吗?提前致谢!


问题答案:

从Swift 2.0开始,您现在可以将函数指针传递给C API。

var gMyHotKeyID = EventHotKeyID()
gMyHotKeyID.signature = OSType("swat".fourCharCodeValue)
gMyHotKeyID.id = UInt32(keyCode)

var eventType = EventTypeSpec()
eventType.eventClass = OSType(kEventClassKeyboard)
eventType.eventKind = OSType(kEventHotKeyPressed)

// Install handler.
InstallEventHandler(GetApplicationEventTarget(), {(nextHanlder, theEvent, userData) -> OSStatus in
    var hkCom = EventHotKeyID()
    GetEventParameter(theEvent, EventParamName(kEventParamDirectObject), EventParamType(typeEventHotKeyID), nil, sizeof(EventHotKeyID), nil, &hkCom)

    // Check that hkCom in indeed your hotkey ID and handle it.
}, 1, &eventType, nil, nil)

// Register hotkey.
let status = RegisterEventHotKey(UInt32(keyCode), UInt32(modifierKeys), gMyHotKeyID, GetApplicationEventTarget(), 0, &hotKeyRef)


 类似资料:
  • 问题内容: 我目前正在使用带有React的CSS模块进行样式设计。因此,我的每个组件都在其特定于组件的css文件中导入,如下所示: 在设置单个组件的样式时,这种方法很好用,但是如何应用不是组件特定的全局样式(html,body,header标签,div等)? 问题答案: 由于您使用的是ES6导入语法,因此可以使用相同的语法导入样式表 另外,您可以使用来包装您的类以切换到全局范围(这意味着CSS模块

  • 问题内容: 现在,我正在开发类似于bash的命令行应用程序。为了实现自动完成功能,我必须知道用户已经按下Tab键。但是我不知道如何在控制台应用程序中监听键盘事件。 有任何想法吗?提前致谢。 问题答案: 这比看起来要复杂一些。 也许您应该看一下为您处理所有事情的jline项目。

  • 问题内容: 我正在使用flask,并尝试执行以下操作。 我已经定义了一个main.py文件,通过它我可以运行我的应用程序,即 我定义了一个名为view的程序包,在其中将声明不同的view模块,每个模块都有自己的路由。 因此,我需要在main.py中具有用于运行服务器的全局应用程序对象,以及在包的视图类中用于注册路由的全局对象。那么,如何创建全局应用程序对象并在所有类之间共享呢? 问题答案: 可以从

  • 本文向大家介绍vue 全局封装loading加载教程(全局监听),包括了vue 全局封装loading加载教程(全局监听)的使用技巧和注意事项,需要的朋友参考一下 前言: 为了页面美观,请求接口的时候延迟没有数据,页面感觉狠卡顿,封装loading,请求接口成功后隐藏掉(我这是用的vant 组件根据自己情况进行改变)。 第一步: 建立loading.vue 第二步: app.vue引入 增加开关

  • 问题内容: 我已经搜索了一段时间,每个人似乎都认为仅使用Java是不可能的,所以我给您一个机会;) 有什么方法可以让我的Java应用程序侦听事件(尤其是关键事件),而另一个不相关的应用程序具有窗口焦点?在我的情况下,即使我的Java应用程序没有焦点,我也希望检测用户何时按下了键盘上的“暂停”键。 我听说有人提到,唯一的方法是编写一些C代码并使用JNI。只是好奇是否有人知道避免这种情况的方法?或者,

  • 问题内容: 我知道我可以为每种形式或根形式指定一个,然后它将级联到所有子形式,但是我想有一种方法可以覆盖所有形式的默认Java Coffee Cup,即使那些形式我可能会忘记。 有什么建议? 问题答案: 您可以将根形式(我假设是)作为自己的子类,并将标准功能放入其构造函数中,例如: 您也可以在此处捆绑其他标准内容,例如将框架的窗口度量标准存储为用户首选项,管理初始窗格等。 此框架产生的任何新框架也