gpt4 book ai didi

ios - 如何将 AnyObject 向下转换为 pid_t

转载 作者:行者123 更新时间:2023-11-28 13:15:43 24 4
gpt4 key购买 nike

我正在尝试获取特定窗口的 pid_t(使用 CGWindowListCopyWindowInfo)。在 swift 中与类型转换进行斗争之后,我终于可以获得 windowOwnerPID

var windowOwnerPIDRef = CFDictionaryGetValue(windowInfoRef, unsafeAddressOf(kCGWindowOwnerPID))
var windowOwnerPID = unsafeBitCast(windowOwnerPIDRef, AnyObject.self)

现在我需要将变量 windowOwnerPID 从 AnyObject 转换为 pid_t 以输入函数

var appRef: AXUIElement = AXUIElementCreateApplication(testPid).takeRetainedValue()

但是不知道怎么办。有没有人遇到过这个问题?

最佳答案

根据documentation , kCGWindowOwnerPID 键的值是 CFNumberRef 类型(编码为 kCFNumberIntType),其中包含拥有该窗口的应用程序的进程 ID。

使用 CoreFoundation 和 Foundation 类型之间的免费桥接在 Foundation 和 Swift 类型之间,以下应该有效:

let wlist = CGWindowListCopyWindowInfo(
CGWindowListOption(kCGWindowListOptionOnScreenOnly), 0).takeRetainedValue()
for wdict in wlist as [ [ String : AnyObject] ] {
if let pid = wdict[kCGWindowOwnerPID] as? Int {
println(pid)
// pid is an Int here. If necessary, convert to pid_t with
let pidd = pid_t(pid)
}
}

(因此甚至不需要调用 unsafeAddressOf()unsafeBitCast())。

使用 Swift 1.2(Xcode 6.3 beta)从CFStringRefString 是必需的(感谢 Rob Napier反馈):

let wlist = CGWindowListCopyWindowInfo(
CGWindowListOption(kCGWindowListOptionOnScreenOnly), 0).takeRetainedValue()
for wdict in wlist as! [ [ String : AnyObject] ] {
if let pid = wdict[String(kCGWindowOwnerPID)] as? Int {
println(pid)
}
}

关于ios - 如何将 AnyObject 向下转换为 pid_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29077761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com