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.
 
 
 
 

45 lines
1.4 KiB

import Cocoa
import ApplicationServices
func getFocusedElement() -> AXUIElement? {
// 1. System wide
let sysWide = AXUIElementCreateSystemWide()
var sysFocusedObj: CFTypeRef?
if AXUIElementCopyAttributeValue(sysWide, kAXFocusedUIElementAttribute as CFString, &sysFocusedObj) == .success,
let obj = sysFocusedObj {
return (obj as! AXUIElement)
}
// 2. Frontmost App
if let frontApp = NSWorkspace.shared.frontmostApplication {
let appElem = AXUIElementCreateApplication(frontApp.processIdentifier)
var appFocusedObj: CFTypeRef?
if AXUIElementCopyAttributeValue(appElem, kAXFocusedUIElementAttribute as CFString, &appFocusedObj) == .success,
let obj = appFocusedObj {
return (obj as! AXUIElement)
}
}
return nil
}
func inspectElement(_ elem: AXUIElement) {
var attrNamesObj: CFArray?
AXUIElementCopyAttributeNames(elem, &attrNamesObj)
if let names = attrNamesObj as? [String] {
print("Attribute Names:", names)
for name in names {
var val: CFTypeRef?
let err = AXUIElementCopyAttributeValue(elem, name as CFString, &val)
if err == .success, let val = val {
print(" \(name): \(val)")
}
}
}
}
if let focused = getFocusedElement() {
print("Found Focused Element:")
inspectElement(focused)
} else {
print("No focused element found")
}