Noi*_*art 6 macos core-graphics objective-c core-foundation
我已经完成了列出所有窗口(按照从前到后的顺序,我认为/希望)使用,CGWindowListCopyWindowInfo但我有一个问题得到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*
}
Run Code Online (Sandbox Code Playgroud)
PS:即使我使用的是排除桌面元素标志,我仍然可以获得像光标和底座这样的桌面元素,如果回答者有任何机会可以解释如何修复它也会很棒!
你应该用来获取窗口ID的关键是kCGWindowNumber.
要从窗口编号获取NSWindow,您可以使用[NSApp windowWithWindowNumber:windowNumber].
不幸的是,这只适用于您的应用拥有的Windows,而不适用于其他应用程序窗口.
此外,如果您真的想在获得其他应用程序窗口的窗口ID后使用NSWindow,那么这是一个不好的假设:并非所有CGWindows都是NSWindows.除了上述调用之外,Apple还没有提供从CGWindow到NSWindow的方法.要使用其他应用程序的窗口(如果其他应用程序是合作的),您将不得不坚持使用CGWindow对象.
| 归档时间: |
|
| 查看次数: |
2474 次 |
| 最近记录: |