可可 – 以编程方式打开Mac帮助菜单

可可 – 以编程方式打开Mac帮助菜单,第1张

概述我正在将GTK#应用程序集成到Mac OS X中.在Mac OS X上的GTK是一些可可和碳基础的包装.我们有一些平台特定的东西直接使用碳全球菜单API(它比Cocoa更低级和灵活,我们不需要是64位). 在将碳调度为命令之前,GTK似乎吞噬了所有的键盘事件.这是有道理的,因为没有将碳指令映射到GTK世界.一般来说,这不是一个问题,因为我们有一个全球的关键事件处理程序,并通过我们自己的命令系统调度 我正在将GTK#应用程序集成到Mac OS X中.在Mac OS X上的GTK是一些可可和碳基础的包装.我们有一些平台特定的东西直接使用碳全球菜单API(它比Cocoa更低级和灵活,我们不需要是64位).

@H_419_8@

在将碳调度为命令之前,GTK似乎吞噬了所有的键盘事件.这是有道理的,因为没有将碳指令映射到GTK世界.一般来说,这不是一个问题,因为我们有一个全球的关键事件处理程序,并通过我们自己的命令系统调度一切.然而,这似乎是阻止Cmd-?从打开帮助搜索菜单,我找不到一种方法来编程.@H_419_8@

菜单管理器的菜单选择功能是有希望的,但是我还没有想出一种自动确定坐标的方法,而且由于某种原因,它仅在两次组合时才起作用.@H_419_8@

或者,一种发送Cmd-按键到Carbon的命令处理或直接合成命令事件将是好的,但我没有在这方面的运气.@H_419_8@

Carbon的ProcessHICommand没有任何使用没有命令ID,我无法弄清楚它是什么(如果有的话)@H_419_8@

关于可可,我可以抓住NSWindow并调用InterpretKeyEvents,但是我没有合成NSEvent的任何运气成功 – 它只是哔哔声.我正在使用的事件是@H_419_8@

@H_419_8@

var evt = NSEvent.KeyEvent (NSEventType.KeyDown,System.Drawing.PointF.Empty,NSEventModifIErMask.CommandKeyMask | NSEventModifIErMask.ShiftKeyMask,win.WindowNumber,NSGraphicsContext.CurrentContext,"?",false,(ushort) keycode);

钥匙码是从GTK键盘图确定为44.我确认使用一个简单的MonoMac(Cocoa)应用程序键盘代码是正确的,但InterpretKeyEvents也不适用于该应用程序中的事件.我找不到任何与该命令关联的选择器.@H_419_8@解决方法 您可以使用辅助功能API在菜单项上假按一下.

@H_419_8@

@H_419_8@

Nsstring *helpMenuTitle = [[[[NSApplication sharedApplication] mainMenu] itemWithTag:HELP_MENU_TAG] Title];AXUIElementRef appElement = AXUIElementCreateApplication(getpID());AXUIElementRef menubar;AXError error = AXUIElementcopyAttributeValue(appElement,kAXMenuBarattribute,(CFTypeRef *)&menubar);if (error) {    return;}CFIndex count = -1;error = AXUIElementGetAttributeValueCount(menubar,kAXChildrenAttribute,&count);if (error) {    CFRelease(menubar);    return;}NSArray *children = nil;error = AXUIElementcopyAttributeValues(menubar,count,(CFArrayRef *)&children);if (error) {    CFRelease(menubar);    return;}for (ID child in children) {    AXUIElementRef element = (AXUIElementRef)child;    ID Title;    AXError error = AXUIElementcopyAttributeValue(element,kAXTitleAttribute,(CFTypeRef *)&Title);    if ([Title isEqualToString:helpMenuTitle]) {        AXUIElementPerformAction(element,kAXPressAction);        CFRelease(Title);        break;    }    CFRelease(Title);}CFRelease(menubar);[children release];
总结

以上是内存溢出为你收集整理的可可 – 以编程方式打开Mac帮助菜单全部内容,希望文章能够帮你解决可可 – 以编程方式打开Mac帮助菜单所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1031755.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存