我得到一个CGWindows列表,CGWindowListCreate如下所示:
CFArrayRef windows = CGWindowListCreate(kCGWindowListOptionOnScreenOnly, 0);
Run Code Online (Sandbox Code Playgroud)
有没有办法知道NSScreen每个窗口在哪个窗口?我试图查看窗口边界和屏幕框架的交集,但如果一个窗口部分离开屏幕,它可以与另一个屏幕的框架相交。
有没有更可靠的方法来做到这一点?
NSScreen假设我有窗口ID,有没有办法获得另一个进程的窗口?
我与以下代码非常接近,但信息字典没有说明窗口在哪个屏幕上.
CFArrayRef windowArray = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
NSArray* windowList = (NSArray*)CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
NSUInteger count = [windowList count];
for (NSUInteger i = 0; i < count; i++)
{
NSDictionary* nswindowsdescription = [windowList objectAtIndex:i];
NSNumber* windowid = (NSNumber*)[nswindowsdescription objectForKey:@"kCGWindowNumber"];
if(windowid)
{
if ([windowid integerValue] == appWeAreLookingForWindowId)
{
Warning(@"Found it: %@", nswindowsdescription);
}
}
}
CFRelease(windowArray);
Run Code Online (Sandbox Code Playgroud)
来自:CGWindowListCopyWindowInfo,kCGWindowLayer和窗口级别
这里输出:
kCGWindowAlpha = 1;
kCGWindowBounds = {
Height = 1010;
Width = 1600;
X = 284;
Y = 43;
};
kCGWindowIsOnscreen = 1; // …Run Code Online (Sandbox Code Playgroud)