作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这段代码产生了预期的调试输出 type = AXUIElement
,但转储堆栈并表示动态转换在实际转换点失败:
func mainWindow() {
var ptr: Unmanaged<AnyObject>?
let kAXMainWindow: CFString! = "AXMainWindow" as NSString
let appRef: AXUIElement! = AXUIElementCreateApplication(self.pid()).takeRetainedValue()
let err = AXUIElementCopyAttributeValue(appRef, kAXMainWindow, &ptr)
if err == AXError(kAXErrorSuccess) {
let val: AnyObject? = ptr?.takeRetainedValue()
if val != nil {
let value: AnyObject = val!
let description = CFCopyTypeIDDescription(CFGetTypeID(value))
println("type = \(description)")
let element = value as AXUIElement
}
else {
println("got nil result")
}
}
}
完成这项工作的正确方法是什么?
最佳答案
此代码适用于 XCode 6.1 和 Swift 1.1。
然而,3 年过去了,Swift 已经变得更好了。尽管如此,当您搜索如何使用 Swift 的辅助功能 API 时,这仍然是最重要的结果。所以我回来用我知道的当前最简单的方式更新:
func AXUIWindowArray(processIdentifier pid:pid_t) -> [AXUIElement] {
var result = [AXUIElement]()
var windowList: AnyObject? = nil // [AXUIElement]
let appRef = AXUIElementCreateApplication(pid)
if AXUIElementCopyAttributeValue(appRef, "AXWindows" as CFString, &windowList) == .success {
result = windowList as! [AXUIElement]
}
return result
}
关于swift - 如何在 Swift 中从 CFTypeRef 转换为 AXUIElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25579449/
我希望能够在 MonoMac 应用程序中使用 Cocoa Accessibility API,但我在 MonoMac 文档中找不到任何对它的引用。 AXUIElement.h 已经映射了吗? 最佳答案
我正在尝试使用辅助功能 API 来自动化外部 OSX 应用程序。一些应用程序的状态无法通过 API 获得,因此我通过以下方式获取它屏幕抓取。为此,我需要获取可访问性对象的 CGWindowID“窗口角
是否可以获取已知其 PID 的打开应用程序的 AXUIElementRef? 我的项目正在打开一个文件/文件夹。然后我获取它的 PID,并且我希望能够访问这个打开的窗口,这就是我想要它的 AXUIEl
这段代码产生了预期的调试输出 type = AXUIElement,但转储堆栈并表示动态转换在实际转换点失败: func mainWindow() { var ptr: Unmanaged?
我是一名优秀的程序员,十分优秀!