macOS尝试以编程方式最小化Windows之类的操作时需要窗口句柄吗?

时间:2019-07-17 20:42:57

标签: objective-c macos appkit

C ++ /目标C和C#。运行AppKit。我正在为统一游戏构建本机插件。

因此AppKit上有以下功能: https://developer.apple.com/documentation/appkit/nswindow/1419426-miniaturize

func miniaturize(_ sender: Any?)

我对发件人部分是什么感到非常困惑...这就像某种窗口句柄告诉它要缩小哪个窗口吗?

当我尝试执行此类AppKit事情时,是否需要以某种方式获取要实现的窗口的进程ID(例如Windows中的进程ID)?还是macOS只是知道该怎么办?

如果我需要一个进程(HWND / IntPtr / etc),如何在Mac OS上获取它?

我的总体目标是在收到通知时以编程方式打开我的游戏窗口。因此,我希望能够最小化窗口。我是在Windows上完成此操作的,但我需要Mac部分的帮助。

目前,我只是将随机的东西传递给miniizeize函数,当然什么也没发生,所以我需要以某种方式获取窗口的进程ID!谢谢。

+(void)minimize:(bool)state andB:(int)handle{
    NSNumber *someNumber = @(handle);
   [NSApplication.sharedApplication.mainWindow deminiaturize:someNumber];
}

1 个答案:

答案 0 :(得分:-1)

好吧,这对于缩小我使用的窗口并不是太困难:

persons.Select(x => x.PersonId).contains(1)

我只有一个窗口,所以它只查找所有指针/为我执行任何操作,并以此方式进行操作,如果您有多个窗口,则可能不想这样做。

为使窗口最小化,我最终不需要此功能,但功能是:

+(void)deminimize{
for(NSWindow* win in [NSApp windows])
    {
        if([win isMiniaturized])
        {
            [win deminiaturize:self];
        }
    }
}

对于隐藏和隐藏,我也不需要指针。我就是这样做的:

+(void)minimize{
   [NSApplication.sharedApplication.mainWindow miniaturize:nil];
}

为了将屏幕显示在最前面(事件/通知等),我在取消隐藏或最小化后使用了以下内容:

+(void)hide{
    [NSApp hide:nil];
}

+(void)unhide{
    [NSApp unhideAllApplications:nil]; //Just unhid all... Hopefully this doesn't cause problems! Might be able to loop through the windows like in my previous method and check if they are hidden instead of just unhiding all... Not sure if this will cause problems or not.
}