相关疑难解决方法(0)

如何监控全局修饰键状态(在任何应用程序中)?

我在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)

cocoa macos-carbon objective-c

11
推荐指数
1
解决办法
5115
查看次数

标签 统计

cocoa ×1

macos-carbon ×1

objective-c ×1