【问题标题】:Accessibility API - Cocoa可访问性 API - Cocoa
【发布时间】:2011-02-19 17:17:36
【问题描述】:

有什么方法(我认为使用辅助功能 API)能够在我的应用程序中按下按钮/击键,然后将鼠标悬停在菜单栏项上并再次按下,然后返回菜单项的名称,即菜单在和应用程序中?

我想在 Cocoa/Objective-C (Mac) 中执行此操作。

【问题讨论】:

    标签: objective-c cocoa macos


    【解决方案1】:

    这就是kAXMenuItemSelectedNotification 通知的用途。玩这些东西的一个简单方法是使用UI Browser:

    • 在“目标”弹出菜单中选择一个应用程序。
    • 从“抽屉”弹出菜单中选择“通知”。
    • 点击“选择的菜单项”和“注册”(或直接在表格中双击)。
    • 从“查看”菜单中选择“通知日志”。
    • 切换到您选择的应用程序并选择一个菜单项。

    这可以让您查看何时触发通知。您的代码可能如下所示:

    AXError err;
    AXObserverRef observer;
    
    pid_t currentAppPID = [NSRunningApplication currentApplication].processIdentifier;
    if ( (err = AXObserverCreate(currentAppPID, notificationCallback, &observer) != kAXErrorSuccess); // XXX failed
    
    CFRunLoopAddSource(CFRunLoopGetCurrent(), AXObserverGetRunLoopSource(observer), kCFRunLoopDefaultMode);
    
    AXUIElementRef element = AXUIElementCreateApplication(currentAppPID);
    if (element == NULL); // XXX failed
    if ( (err = AXObserverAddNotification(observer, element, kAXMenuItemSelectedNotification, NULL)) != kAXErrorSuccess); // XXX failed
    

    请注意,您必须单独观察每个正在运行的应用程序(以及启动/退出时的其他应用程序),或者注册NSWorkspaceDidActivateApplicationNotification 并在此时取消注册/注册最前面的应用程序(后者可能是最简单的10.6,因为您会收到 NSRunningApplication 作为通知的一部分)。

    I would think actually selecting the item would be easier for a user, but if you really do want to press another key to complete the action, you can observe kAXSelectedChildrenChanged, which will be triggered when the selection moves from one menu项目到另一个。

    【讨论】:

    • 我不确定我是否理解你...我在“DidFinishLaunching”中注册:[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(mySelector:) name:NSWorkspaceDidActivateApplicationNotification object :零];我把你的代码放在我的选择器中...... - (void)mySelector:(NSNotification*)note 是这样吗?
    • 我收到 2 个错误:“Notificationcallback undeclared”和“expected expression before '}'”
    • 我不明白你..什么是回调?怎么样?
    • 这是一个在通知触发时被调用的函数(由 typedef 指定的签名,在本例中为 AXObserverCallback)。请参阅文档:developer.apple.com/library/mac/#documentation/Accessibility/…
    猜你喜欢
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 2016-11-04
    • 2015-07-01
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多