gpt4 book ai didi

objective-c - 从 CGWindowListCopyWindowInfo 获取 NSWindow*

转载 作者:太空狗 更新时间:2023-10-30 03:43:21 35 4
gpt4 key购买 nike

我已经使用 CGWindowListCopyWindowInfo 列出了所有窗口(我认为/希望按 z 顺序从前到后),但是我在获取 NSWindow* 时遇到问题这样我就可以与 orderFront: 等一起使用

似乎我什至没有从中得到CGWindowID

这是我的代码,是js-ctypes。

var cfarr_win = ostypes.API('CGWindowListCopyWindowInfo')(ostypes.CONST.kCGWindowListOptionAll | ostypes.CONST.kCGWindowListExcludeDesktopElements, ostypes.CONST.kCGNullWindowID);

var cnt_win = ostypes.API('CFArrayGetCount')(cfarr_win);

for (var i = 0; i < cnt_win; i++) {
var thisWin = {};
// trying to get NSWindow* to the window here, so i can use with orderFront: etc

// example on how i get pid:
var rez_pid = ostypes.API('objc_msgSend')(c_win, ostypes.HELPER.sel('objectForKey:'), myNSStrings.get('kCGWindowOwnerPID'));
var int_pid = ostypes.API('objc_msgSend')(rez_pid, ostypes.HELPER.sel('integerValue'));
thisWin.pid = int_pid;

// How can I get NSWindow*

}

PS:即使我使用排除桌面元素标志,我仍然会得到桌面元素,如光标和停靠栏,如果回答者也能阐明如何解决这个问题,那就太棒了!

最佳答案

您应该用来获取窗口 ID 的键是 kCGWindowNumber

并从窗口号you could use [NSApp windowWithWindowNumber:windowNumber]得到一个NSWindow .

不幸的是,这仅适用于您的应用程序拥有的窗口,不适用于其他应用程序窗口。

此外,如果您真的想在获得其他应用程序窗口的窗口 ID 后使用 NSWindow,那么这是一个错误的假设:not all CGWindows are NSWindows .除了上述调用之外,Apple 没有提供从 CGWindow 到 NSWindow 的方法。要使用其他应用程序的窗口(前提是其他应用程序是合作的),您必须坚持使用 CGWindow 对象。

关于objective-c - 从 CGWindowListCopyWindowInfo 获取 NSWindow*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31889791/

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