[Mac OS] Whitch显示窗口在哪?

时间:2016-11-30 06:47:06

标签: macos

我有一个窗口的CGWindowID和我Mac的所有CGDirectDisplayID。 然后我想知道窗口在哪个显示器上。 我试图获取Window的CGWindowInfo,但是找不到有用的信息。

CFArrayRef windowList =  CGWindowListCopyWindowInfo(kCGWindowListOptionIncludingWindow, windowID);
CFArrayApplyFunction(windowList, CFRangeMake(0, CFArrayGetCount(windowList)), &WindowListApplierFunction, this);
CFRelease(windowList);

1 个答案:

答案 0 :(得分:1)

您可以使用NSScreen API。使用[NSScreen screens]检索计算机所连接的屏幕,然后匹配[myWindow screen]返回的屏幕。

如果您拥有您想知道的窗口,请执行以下操作:

CGWindowID windowID = ... // init with your value
NSWindow *window = [NSApplication windowWithWindowNumber:(NSInteger)windowID];

if ([[NSScreen screens] count] > 1)
{
    // you have more than one screen attached
    NSScreen *currentScreen = [window screen];

    // you can then test if the window is in the main display
    if (currentScreen == [NSScreen mainScreen])
    {
        // your window is on the main screen
    }
    else
    {
       // your window is not on the main screen
    }
}

但是,如果您不拥有该窗口,因为它由另一个应用程序拥有,那么我建议您首先了解NSScreen使用的Quartz协调系统与使用的Core Image坐标系之间的差异。 CGWindow API。这里有一篇很好的文章(英文):

http://www.thinkandbuild.it/deal-with-multiple-screens-programming/

和这里(日语)(如果你不懂日语,请使用谷歌翻译):

http://xcatsan.blogspot.com/2009/09/nsscreen-cgwindow.html

其次,您需要检索窗口边界,如我推荐的Son of Grab示例代码或此处所述:

Determine which screen a window is on given the window ID

然后你需要按照建议的窗口边界计算它所在的屏幕。