作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道这可以在 Windows 上完成,并且 XGrabKey
可用于 X11,但是 Mac OS X 呢?我想创建一个类,允许设置即使应用程序窗口处于非事件状态也可以调用的快捷键。
最佳答案
Cocoa 中(还没有?)支持这一点。您仍然可以使用旧的 Carbon 库(64 位兼容),但不幸的是 Apple 决定删除有关该主题的所有文档。
这里有一篇不错的博客文章:http://dbachrach.com/blog/2005/11/program-global-hotkeys-in-cocoa-easily/
这篇文章对我来说有点长,所以这里是简短的版本:
- (id)init {
self = [super init];
if (self) {
EventHotKeyRef hotKeyRef;
EventHotKeyID hotKeyId;
EventTypeSpec eventType;
eventType.eventClass = kEventClassKeyboard;
eventType.eventKind = kEventHotKeyPressed;
InstallApplicationEventHandler(&mbHotKeyHandler, 1, &eventType, NULL, NULL);
hotKeyId.signature = 'hotk';
hotKeyId.id = 1337;
RegisterEventHotKey(kVK_ANSI_C, cmdKey + shiftKey, hotKeyCopyId, GetApplicationEventTarget(), 0, &hotKeyRef);
}
}
OSStatus mbHotKeyHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData) {
// Your hotkey was pressed!
return noErr;
}
热键通过 RegisterEventHotKey(…)
调用注册。在本例中,它注册了 CMD + Shift + C。
ANSI 键在 HIToolbox/Events.h 中定义,因此您可以在那里查找其他键(只需在 XCode 中按 CMD + Shift + O,然后输入 Events.h 即可找到它)。
如果您想要多个热键或者想要从处理程序调用方法,您必须做更多的工作,但这都在本答案顶部附近的链接中。
我一直在寻找这个问题的简单答案,所以我希望这对其他人有帮助......
关于macos - 如何在 Mac OS X 中实现全局键盘 Hook ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2894869/
我是一名优秀的程序员,十分优秀!