Проблема с распаковкой AXUIElementCopyAttributeValue в ОС Ma c - PullRequest
0 голосов
/ 30 мая 2020

Я пытаюсь скопировать информацию, касающуюся опции окна доступности. К сожалению, я не могу устранить ошибку, вызванную методом AXUIElementCopyAttributeValue, несмотря на то, что передал в качестве параметров все правильные типы.

Код:

for entry in windowList! as Array {
  let ownerName: String = entry.object(forKey: kCGWindowName) as? String ?? "N/A"

  let ownerPID: Int = entry.object(forKey: kCGWindowOwnerPID) as? Int ?? 0
  let pid = Int32(ownerPID)

  //3. Get AXUIElement using PID
  let windowAccessibilityElem : AXUIElement = AXUIElementCreateApplication(pid)
  print(windowAccessibilityElem)

  var position : CFTypeRef? = nil


  /****
  * This line throws the error
  ****/
  let res : AXError = AXUIElementCopyAttributeValue(windowAccessibilityElem, kAXPositionAttribute as CFString, position as! UnsafeMutablePointer<CFTypeRef?>)

print("res is: \(res)")
...

Я новичок в Swift, но я прочитал и перечитал документацию по дополнительным параметрам, и на самом деле неясно, какое неожиданное значение передается - я думаю, что это связано с переменной позиции, но из того, что я вижу, я должен правильно передать ссылку. Любая помощь будет принята.

1 Ответ

1 голос
/ 30 мая 2020

Вы должны назначить указатель на переменную с помощью оператора in-out &

var position : CFTypeRef?
let res : AXError = AXUIElementCopyAttributeValue(windowAccessibilityElem, 
                    kAXPositionAttribute as CFString, 
                    &position)
  • res содержит ошибку при сбое.
  • position содержит позицию при успешном завершении.

В документации параметр ввода-вывода обозначен При возврате, ...

...