gpt4 book ai didi

objective-c - 辅助功能 API - cocoa

转载 作者:行者123 更新时间:2023-12-03 16:20:48 26 4
gpt4 key购买 nike

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

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

最佳答案

这就是 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 作为通知的一部分)。

我认为实际选择该项目对用户来说会更容易,但如果您确实想按另一个键来完成操作,您可以观察 kAXSelectedChildrenChanged,当选择从一个菜单项移动到另一个菜单项。

关于objective-c - 辅助功能 API - cocoa ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5052266/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com