【问题标题】:Simulate a mouse click on a menu item in Cocoa?模拟鼠标单击 Cocoa 中的菜单项?
【发布时间】:2015-05-21 19:46:27
【问题描述】:

例如,我有一个标题为“历史”的NSMenuItem 类型变量。我需要一个键盘快捷键 Meta+h 来执行与单击此菜单项相同的操作(弹出子菜单列表)..

我认为可能有两种实现方式:

1.将此菜单项绑定到键盘快捷键,然后Cocoa会在快捷键触发时触发执行属于该菜单项的动作

2.不绑定键盘快捷键到项目。为Meta+h创建一个EventHandler,当事件激活时,模拟鼠标点击菜单项。

但是,这两种方法目前都不起作用。

对于键盘快捷键,有一个名为setKeyEquivalent的方法,但它使用Command而不是Meta作为修饰符。其结果是执行绑定到菜单项的操作,而不是弹出子菜单。

为了模拟鼠标点击,在 Cocoa 的NSMenuItem 参考中,我还没有看到如何将click 之类的事件发送到NSMenuItem..

有人对此有想法吗?谢谢!

【问题讨论】:

  • 你真的不想用菜单模拟鼠标点击,除非你的建筑辅助功能或自动化工具。它需要摆弄 runloops

标签: objective-c macos cocoa keyboard-shortcuts


【解决方案1】:
[menuItem setKeyEquivalent:@" "];  
[menuItem setKeyEquivalentModifierMask:0];  

使用任何这些修饰键掩码(使用 C 位 OR 运算符组合):

  • NSShiftKeyMask
  • NSAlternateKeyMask
  • NSCommandKeyMask
  • NSControlKeyMask

(顺便说一句,Apple's docs 真的很有用!)

【讨论】:

  • 可能有用,但也令人愤怒。祝你好运找到可能键的字符串。
  • @uchuugaka 文档并不总是很好 - 是的。不过,一直都在变得更好。但是,掩码都在setKeyEquivalentModifierMask: 文档中进行了描述,keyEquivalent: 也是如此,包括退格和删除。至于更奇特的密钥 - 您可能根本不想使用它们,因为您的用户无论如何都找不到密钥;-)
【解决方案2】:

你的问题有点不清楚 -

如果您设置了快捷方式,Cocoa 会为您调用该命令,而您的代码将永远不会知道用户是使用鼠标还是按等效键。

如果您想通过其他方式调用相同的命令(键入NSView 等)。您可能希望手动调用与菜单定义挂钩的相同方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2014-01-03
    • 2011-01-25
    • 2018-11-06
    相关资源
    最近更新 更多