Cocoa 在给定窗口ID的情况下,确定窗口位于哪个屏幕上
假设我有窗口id,是否有方法获取另一个进程的窗口的Cocoa 在给定窗口ID的情况下,确定窗口位于哪个屏幕上,cocoa,nswindow,Cocoa,Nswindow,假设我有窗口id,是否有方法获取另一个进程的窗口的NSScreen 我很熟悉下面的代码,但是信息字典没有说明窗口在哪个屏幕上 CFArrayRef windowArray = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID); NSArray* windowList = (NSArray*)CGWindowListCopyWindowInfo(kCGWindowListOptionOnScr
NSScreen
我很熟悉下面的代码,但是信息字典没有说明窗口在哪个屏幕上
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);
我可以尝试从窗口边界计算屏幕,但我想知道是否有更好的方法。此信息不可用的原因可能是一个窗口可以同时位于多个屏幕上。如果用户拖动窗口,使其一部分在一个窗口中,其余部分在另一个窗口中,则不存在当前屏幕
您的窗口边界估计方法可能是最好的选择。我最后计算了窗口边界的交点,每个屏幕都选择了最大的屏幕。在某些情况下,这是不可能的。例如,我有两个显示器,每个显示器都连接到内置的DisplayPort,并通过DisplayLink USB适配器连接,并且一个窗口不能被拉伸以显示在两个屏幕上;无论窗口“主要”在哪个屏幕上,它都将显示在哪个屏幕上。
kCGWindowAlpha = 1;
kCGWindowBounds = {
Height = 1010;
Width = 1600;
X = 284;
Y = 43;
};
kCGWindowIsOnscreen = 1; // This is not the screen id, by the way
kCGWindowLayer = 0;
kCGWindowMemoryUsage = 7709736;
kCGWindowName = "osx - CGWindowListCopyWindowInfo, kCGWindowLayer and window level - Stack Overflow";
kCGWindowNumber = 4000;
kCGWindowOwnerName = Safari;
kCGWindowOwnerPID = 240;
kCGWindowSharingState = 1;
kCGWindowStoreType = 2;
kCGWindowWorkspace = 1;