我在Cocoa项目中使用了一些Carbon代码来处理来自其他应用程序的全局键事件(快捷方式).目前我已经设置了一个kEventHotKeyReleased事件处理程序,当我的应用程序不活动时,我可以成功获取热键.这会在我的应用程序中触发一些操作
我的行为问题kEventHotKeyReleased是:
例如,我按下Cmd-Shift-P组合键.一旦我释放"P"键,就会触发热键事件.当所有键都未被按下时,我需要能够触发事件(或手动触发它)(即:Cmd和Shift键也被释放).
监控热键很容易,但我没有看到任何用于监控单个按键的信息.如果我可以监控修改键关键状态,我就会开展业务.
关于如何做到这一点的任何提示?
提前致谢!
更新:
我已经尝试过使用kEventRawKeyUp,kEventRawKeyModifiersChanged但是kEventHotKeyReleased尽管我将它们设置为完全相同的方式,但它们仍在使用kEventHotKeyReleased.
EventTypeSpec eventTypes[] = {{kEventClassKeyboard, kEventHotKeyReleased}, {kEventClassKeyboard, kEventRawKeyUp}};
// Changing the order in the list does not help, nor does removing kEventHotKeyReleased
OSStatus err = InstallApplicationEventHandler(&globalHotkeyHandler, GetEventTypeCount(eventTypes), eventTypes, NULL, NULL);
// err == noErr after this line
Run Code Online (Sandbox Code Playgroud)
要求该globalHotKeyHandler方法kEventHotKeyReleased,但kEventRawKeyUp由于某种原因我似乎无法掌握.这是我的globalHotKeyHandler方法的样子:
OSStatus globalHotkeyHandler(EventHandlerCallRef nextHandler, EventRef anEvent, void *userData) {
NSLog(@"Something happened!");
} …Run Code Online (Sandbox Code Playgroud)