我正在开发一个Mac OS X的应用程序,需要监听键盘快捷输入以便对它们进行操作。
例如:
- 向上 和 向下 键在表格视图中上下移动。
- ⌘ + ⌦ 删除一个项目。
- ⌘ + ⇧ + N 创建一个新项目。
它不应该局限于聚焦控件上的事件。
有什么想法吗?
提前致谢。
我正在开发一个Mac OS X的应用程序,需要监听键盘快捷输入以便对它们进行操作。
例如:
它不应该局限于聚焦控件上的事件。
有什么想法吗?
提前致谢。
+[NSEvent addLocalMonitorForEventsMatchingMask:handler:]
。这将创建一个对象,每当您的应用程序接收到指定类型的事件时,它都会调用一个块处理程序。处理将在您的NSApplication
将事件分派到窗口之前进行,并且您有机会修改事件或停止其进一步进行。NSEvent * (^monitorHandler)(NSEvent *);
monitorHandler = ^NSEvent * (NSEvent * theEvent){
switch ([theEvent keyCode]) {
case 123: // Left arrow
NSLog(@"Left behind.");
break;
case 124: // Right arrow
NSLog(@"Right as always!");
break;
case 125: // Down arrow
NSLog(@"Downward is Heavenward");
break;
case 126: // Up arrow
NSLog(@"Up, up, and away!");
break;
default:
break;
}
// Return the event, a new event, or, to stop
// the event from being dispatched, nil
return theEvent;
};
// Creates an object we do not own, but must keep track of so that
// it can be "removed" when we're done; therefore, put it in an ivar.
eventMon = [NSEvent addLocalMonitorForEventsMatchingMask:NSKeyDownMask
handler:monitorHandler];
dealloc
中删除它,但没有给出理由。
你可能需要在你的应用程序中实现回调函数。可以查看CGEventTapCreate来开始监听热键。
CGEventTapCreate(kCGSessionEventTap,
kCGTailAppendEventTap,
kCGEventTapOptionDefault,
kCGEventKeyDown
myEventTapCallback,
NULL);
myEventTapCallback应符合CGEventTapCallBack,当按下键时会调用该回调函数。在myEventTapCallback内部,您将获得足够的按键信息,并可以实现自定义功能。
-[NSApplication sendEvent:]
来拦截应用程序中的所有事件,或者通过覆盖-[NSWindow sendEvent:]
来拦截每个窗口级别的事件。请注意保留HTML标签。
dealloc
中删除它的警告已经改变了。 - jscs