【发布时间】:2017-11-24 22:44:49
【问题描述】:
是否可以在 swift 中获取所有应用程序的列表,其中包含前台窗口,然后设置这些窗口的大小和位置。
我得到这样的 Windows 属性列表
let type = CGWindowListOption.optionOnScreenOnly
let windowList = CGWindowListCopyWindowInfo(type, kCGNullWindowID) as NSArray? as? [[String: AnyObject]]
for entry in windowList!
{
var owner = entry[kCGWindowOwnerName as String] as! String
var bounds = entry[kCGWindowBounds as String] as? [String: Int]
var pid = entry[kCGWindowOwnerPID as String] as? Int32
print ("\(owner) \(bounds) \(pid) ")
if owner == "Erinnerungen"
{ bounds!["X"] = 0
bounds!["Y"] = 0
print("reset bounds")
let appRef = AXUIElementCreateApplication(pid!); //TopLevel Accessability Object of PID
print(appRef)
var value: AnyObject?
let result = AXUIElementCopyAttributeValue(appRef, kAXWindowsAttribute as CFString, &value)
if result == .success, let windowList = value as? [AXUIElement]
{ // DO ANYTHING
} else
{ print("Result no Success or no valid windowlist returnd")
}
}
}
现在我尝试更改一些属性,但这没有任何效果。 还尝试获取 PID 的 TopLevel Accessability 对象的 AttributeValue 返回 AXError (kAXErrorCannotComplete = -25204)
【问题讨论】:
-
该错误的描述是:函数无法完成,因为消息传递以某种方式失败,或者因为与函数通信的应用程序繁忙或无响应。
-
我尝试了 2 个系统应用程序终端和提醒。同时 kAXErrorCannotComplete = -25204。系统应用不应该支持可访问性吗?
-
我不得不关闭沙箱,以避免这个错误