Objective c 在Cocoa中模拟鼠标单击菜单项?
例如,我有一个名为“History”的Objective c 在Cocoa中模拟鼠标单击菜单项?,objective-c,macos,cocoa,keyboard-shortcuts,Objective C,Macos,Cocoa,Keyboard Shortcuts,例如,我有一个名为“History”的NSMenuItem类型变量。我需要一个键盘快捷键Meta+h来执行与单击此菜单项相同的操作(弹出一个子菜单列表) 我认为有两种方法可以实现这一点: 1.将此菜单项绑定到键盘快捷键,然后Cocoa将触发该快捷键,并在触发该快捷键时执行属于该项的操作 2.不将键盘快捷键绑定到项目。为Meta+h创建一个EventHandler,当事件激活时,模拟鼠标单击菜单项 然而,这两种方法目前都不起作用 对于键盘快捷键,有一个名为setKeyEquivalent的方法,但
NSMenuItem
类型变量。我需要一个键盘快捷键Meta+h来执行与单击此菜单项相同的操作(弹出一个子菜单列表)
我认为有两种方法可以实现这一点:
1.将此菜单项绑定到键盘快捷键,然后Cocoa将触发该快捷键,并在触发该快捷键时执行属于该项的操作
2.不将键盘快捷键绑定到项目。为Meta+h创建一个EventHandler,当事件激活时,模拟鼠标单击菜单项
然而,这两种方法目前都不起作用
对于键盘快捷键,有一个名为setKeyEquivalent
的方法,但它使用Command而不是Meta作为修饰符。其结果是执行绑定到菜单项的操作,而不是弹出子菜单
为了模拟鼠标点击,在Cocoa的NSMenuItem
参考资料中,我没有看到如何将类似click
的事件发送到NSMenuItem
有人对此有想法吗?谢谢 你的问题有点不清楚- 如果设置了快捷方式,Cocoa将为您调用该命令,您的代码将永远不会知道用户是使用了鼠标还是按了相应的键 如果您希望通过其他方式调用同一命令(输入
NSView
等)。您可能希望手动调用与菜单定义连接的相同方法
[menuItem setKeyEquivalent:@" "];
[menuItem setKeyEquivalentModifierMask:0];
使用这些修改器关键帧掩码中的任意一个(使用C位OR运算符组合):
- NSShiftKeyMask
- NSAlternateKeyMask
- NSCommandKeyMask
- NSControlKeyMask
(顺便说一句,可能真的很有用!)可能有用,但也会让人恼火。祝你好运找到可能的键的字符串。@Uchiugaka文档并不总是很好-真的。不过,情况一直在好转。。但是,
setKeyEquivalentModifierMask:
doc中描述了所有掩码,与keyEquivalent:
相同,包括退格和删除。至于更奇特的密钥-您可能根本不想使用它们,因为您的用户无论如何都找不到密钥;-)除非您的建筑可访问性或自动化工具可用,否则您确实不希望使用菜单模拟鼠标单击。它需要摆弄运行循环