我的要求是从我的应用程序启动第三方应用程序并将用户名自动填充到指定的文本框中。目前,我可以启动应用程序并尝试使用 Cocoa 框架,但我只能获取窗口信息,而不能获取其中的元素。我也尝试过使用 Accessibility API,当我使用 Accessibility Inspector 进行分析时,我发现我需要的元素的父角色是 Window,但该元素并没有出现在 Window 的子元素中。我不知道如何继续。还有其他方法可以帮助我实现这一目标吗?
我尝试过使用Cocoa框架,但只能获取窗口的信息,不知道如何抓取里面的元素。我还尝试使用 Accessibility API 来检索它们。
您可以使用
CGEvent
并发送事件,例如新的鼠标位置和击键:
private func moveMouseTo(x: Int, y: Int) {
let moveEvent = CGEvent(mouseEventSource: nil, mouseType: .mouseMoved, mouseCursorPosition: CGPoint(x: x, y: y), mouseButton: .left)
moveEvent?.post(tap: .cghidEventTap)
}
let keyDownEvent = CGEvent(keyboardEventSource: nil, virtualKey: rightArrowKeyCode, keyDown: true)
keyDownEvent?.flags = CGEventFlags.maskCommand
keyDownEvent?.post(tap: CGEventTapLocation.cghidEventTap)
let keyUpEvent = CGEvent(keyboardEventSource: nil, virtualKey: rightArrowKeyCode, keyDown: false)
keyUpEvent?.flags = CGEventFlags.maskCommand
keyUpEvent?.post(tap: CGEventTapLocation.cghidEventTap)
请注意,为了使用这两个事件(鼠标和键盘),您需要在应用程序的 macOS 设置中配置“辅助功能”选项,例如 AXIsProcessTrusted
您还可以使用 OCR 或使用 CreateML(用于图像识别)的机器学习模型来识别第 3 方应用程序的正确边界框(特别是文本字段)。
通过这种方式,您可以移动鼠标并单击比发送击键更精确的位置。