Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在Cocoa中模拟鼠标单击菜单项?_Objective C_Macos_Cocoa_Keyboard Shortcuts - Fatal编程技术网

Objective c 在Cocoa中模拟鼠标单击菜单项?

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的方法,但

例如,我有一个名为“History”的
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:
相同,包括退格和删除。至于更奇特的密钥-您可能根本不想使用它们,因为您的用户无论如何都找不到密钥;-)除非您的建筑可访问性或自动化工具可用,否则您确实不希望使用菜单模拟鼠标单击。它需要摆弄运行循环