Определите, на каком экране находится окно с заданным идентификатором окна
Есть ли способ получить 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);
С: CGWindowListCopyWindowInfo, kCGWindowLayer и окна
Здесь Вывод:
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;
Я мог бы попытаться вычислить экран по границам окна, но мне интересно, есть ли лучший способ.1 ответ:
Причина, по которой эта информация недоступна, вероятно, заключается в том, что окно может быть одновременно на нескольких экранах. Если пользователь перетащил окно так, что часть его находится в одном окне, а остальная часть-в другом, то нет такой вещи, как текущий экран.
Ваш метод оценки границ окна, вероятно, является лучшим вариантом.