Mac开发系列3-通过AXError来判断Accessibility API的调用情况

1,656 阅读2分钟

通过第一篇AXUIElement传送门的基本调用和第二篇的AXObserver传送门的监听,已经基本完成了Accessibility API的使用情况了。但如果想使得我们的代码更加健壮,那就必须做更多的错误和异常处理。而刚好Accessibility API的函数,基本上都会返回一个AXError,来让我们进行判断调用情况和进行异常的处理

AXError

首先我们看看AXError是什么东东?同样的,具体可以查阅AXError.h

其实AXError是一个枚举,并且是一个Int32.那他有哪些值呢?

  1. success: 它的RawValue0。它代表着API调用成功,但并不代表获取的值一定是有值的,这个需要注意。所以在判断的时候,需要进行双重判断。即要判断AXError是否成功,同时还要判断value是有值:
var value : AnyObject?
let axError:AXError = AXUIElementCopyAttributeValue(applicationRef!, kAXWindowsAttribute as CFString, &value)
if axError == .success{//这里判断是否调用成功
	if let windows = value as? [AXUIElement]{//这里判断获取的value是否有值,即非空
    	   print("all windows \(windows)")
	}
}
  1. failure: 它的RawValue-25200。系统异常,由系统抛出的错误。如分配内存给对象的时候,出现的失败。
  2. illegalArgument: 它的RawValue-25200。传了一个非法的值去某个 Accessibility API的函数。
  3. invalidUIElement: 它的RawValue-25202。API函数不支持该AXUIElement
  4. invalidUIElementObserver: 它的RawValue-25203。 API函数不支持和不接受该AXObserver
  5. cannotComplete: 它的RawValue-25204。函数无法完成,一般情况下是出现在程序处于无响应或者繁忙中。
  6. attributeUnsupported 它的RawValue-25205。就是该AXUIElement不支持该attribute
  7. actionUnsupported 它的RawValue-25206. 就是该AXUIElement不支持该action
  8. notificationUnsupported 它的RawValue-25207. 就是该AXUIElement不支持该notification
  9. notImplemented 它的RawValue--25208. 表示方法或者函数没有声明或者实现。一般情形下出现在程序未被允许使用Accessibility API
  10. notificationAlreadyRegistered 它的RawValue-25209. 就是该notification已经存在了。一般出现在重复添加相同key的通知
  11. notificationNotRegistered 它的RawValue-25210. 用于判断该notification是否已经注册了。
  12. apiDisabled 它的RawValue-25211. 这个就很直白了,就是未被允许使用Accessibility API。需要在System Preference -> Security & Privacy -> Accseeibility里面添加。
  13. noValue: 它的RawValue-25212. 代表着请求的Value不存在。
  14. parameterizedAttributeUnsupported: 它的RawValue-25213. 就是该AXUIElement不允许使用parameterizedAPI函数
  15. notEnoughPrecision: 它的RawValue-25214. 不精准。这个作者暂时也没遇到过