Soniox Mobile to Mac - Real-time Voice Dictation & Remote Input Control
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

39 lines
1.4 KiB

import Cocoa
import ApplicationServices
func printAXTree(_ elem: AXUIElement, depth: Int = 0) {
if depth > 7 { return }
let indent = String(repeating: " ", count: depth)
var roleObj: CFTypeRef?
AXUIElementCopyAttributeValue(elem, kAXRoleAttribute as CFString, &roleObj)
let role = (roleObj as? String) ?? "unknown"
var valObj: CFTypeRef?
AXUIElementCopyAttributeValue(elem, kAXValueAttribute as CFString, &valObj)
let val = (valObj as? String) ?? ""
var titleObj: CFTypeRef?
AXUIElementCopyAttributeValue(elem, kAXTitleAttribute as CFString, &titleObj)
let title = (titleObj as? String) ?? ""
var focusedObj: CFTypeRef?
AXUIElementCopyAttributeValue(elem, kAXFocusedAttribute as CFString, &focusedObj)
let isFocused = (focusedObj as? Bool) ?? false
print("\(indent)[\(role)] title='\(title)' val='\(val)' focused=\(isFocused)")
var childrenObj: CFTypeRef?
if AXUIElementCopyAttributeValue(elem, kAXChildrenAttribute as CFString, &childrenObj) == .success,
let children = childrenObj as? [AXUIElement] {
for child in children {
printAXTree(child, depth: depth + 1)
}
}
}
if let frontApp = NSWorkspace.shared.frontmostApplication {
print("Front App:", frontApp.localizedName ?? "")
let appElem = AXUIElementCreateApplication(frontApp.processIdentifier)
printAXTree(appElem)
}