历史回顾一下AccessibilityAPI
的文章~~~
本文应该就是关于Accessibility的最后一篇介绍了。之后还会继续发表一些关于MacOS开发的技术和实现。欢迎大家持续关注~~~
预热一下之后会更新的主题。预计在春节前完成全部的更新。
- 无window、不显示dock,只在StatusBar的APP
- MacOS APP开机启动的实现方式
- AppleScript的调用方式
- 模拟键盘按键的实现
废话不多说,开始正题。
AXValue
在使用AccessibilityAPI
获取AXUIElement
的值的时候,会返回AXValue的类型。例如在获取Window
的Position
、Size
、Frame
的时候就会出现了。
先看看官方文档中的它,是个什么东东?具体的可自行查阅AXValue.h
AXValue
的东西不多,一共就4个函数和一个枚举(只在macOS 10.11可使用)
public enum AXValueType : UInt32 {
@available(macOS 10.11, *)
case cgPoint = 1
@available(macOS 10.11, *)
case cgSize = 2
@available(macOS 10.11, *)
case cgRect = 3
@available(macOS 10.11, *)
case cfRange = 4
@available(macOS 10.11, *)
case axError = 5
@available(macOS 10.11, *)
case illegal = 0
}
public func AXValueGetTypeID() -> CFTypeID
public func AXValueCreate(_ theType: AXValueType, _ valuePtr: UnsafeRawPointer) -> AXValue?
public func AXValueGetType(_ value: AXValue) -> AXValueType
public func AXValueGetValue(_ value: AXValue, _ theType: AXValueType, _ valuePtr: UnsafeMutableRawPointer) -> Bool
那我们来解读一些每个函数的作用。
AXValueGetTypeID
这个其实是用于判断你的value是否是一个AXValue类型。
AXValueGetType
这个其实是用于获取你的AXValue具体是一个什么类型,如CGPoint、CGSize、CGRect、CFRange等。
AXValueGetValue
这个是用于获取具体的值。
AXValueCreate
这个是把你具体的值变成AXValue。
那么我们应该如何使用他呢?
创建AXValue
var point:CGPoint = CGPoint.init(x: 100, y: 100)
let pointAXValue:AXValue? = AXValueCreate(.cgPoint, &point)
获取AXValue具体的值
var value = CGPoint.zero
let isSuceess = AXValueGetValue(positionAXValue, .cgPoint, &value)
if isSuceess{
print("i got the point , value is \(value)")
}else{
print("faile to get the point")
}
获取AXValue具体值的类型
//假设现在有一个unknowAXValue
if AXValueGetType(unknowAXValue) == AXValueType.cgPoint{
print("it is CGPoint Type")
}
判断对象是否AXValue类型
假设现在有一个Any类型的对象,名为Obj
if CFGetTypeID(Obj) == AXValueGetTypeID(){
print("it is AXValue Type")
}else{
print("Not a AXValue Type")
}