【发布时间】:2015-06-29 15:35:02
【问题描述】:
我正在尝试以编程方式在可可应用程序中为我的用户按住选项键。
对于我的生活,我似乎无法抓住 NSEVENT 对其进行修改并重新发布。我仍然想捕获 MouseDown 事件,因为我使用了该位置 - 我一直在尝试抓取该事件并将修饰符标志添加到它,但它似乎不起作用。对此的任何帮助将不胜感激。
这就是我所做的:
- (void)mouseDown:(NSEvent *)theEvent {
[super mouseDown:theEvent];
if(!(theEvent.modifierFlags == NSAlternateKeyMask)){
NSEvent *newEvent = [NSEvent keyEventWithType:
theEvent.type
location:theEvent.locationInWindow
modifierFlags:NSAlternateKeyMask
timestamp:theEvent.timestamp
windowNumber:theEvent.windowNumber
context:theEvent.context
characters:@""
charactersIgnoringModifiers:@""
isARepeat:YES
keyCode:0];
[super mouseDown:newEvent];
}
}
我也尝试过使用 CGPostEvent 的变体——但它似乎也从来没有工作过。显然只发布修饰符标志比看起来要困难。
谢谢
【问题讨论】:
-
按住选项键的目的是什么,即,其他代码的行为会有所不同,它将如何检测选项键的状态?如果其他代码使用
CGEventSourceFlagsState来检查修饰键状态,我不认为与NSEvents 混淆会愚弄它。 (顺便说一句,isARepeat:YES看起来不对。) -
im尝试模拟内置于pdfkit中的选择功能 - 选择选项但不具有用户保持选项。 span>
-
为了清楚起见,我对其进行了编辑 - 删除了 cgeventsourceflagsstate
标签: objective-c macos cocoa nsevent