1

要删除 Dock 中的应用程序图标,我使用以下代码:

ProcessSerialNumber psn = { 0, kCurrentProcess };
TransformProcessType(&psn, kProcessTransformToUIElementApplication);

此代码隐藏了 Dock 中的图标,但它也关闭了应用程序窗口。可以在不关闭主窗口的情况下隐藏图标吗?

[self.window setCanHide:NO];

这不是一个解决方案,因为当用户Hide Others从另一个应用程序菜单中选择时,应用程序不会被隐藏。

4

2 回答 2

1

我不确定我是否理解最后一句“这不是解决方案,因为当用户从另一个应用程序菜单中选择隐藏其他应用程序时,应用程序不会被隐藏”中的意思。但是,如果您希望在浏览代码时窗口保持打开状态

ProcessSerialNumber psn = { 0, kCurrentProcess };
TransformProcessType(&psn, kProcessTransformToUIElementApplication);

而且您希望它在其他时候隐藏自己,您可以尝试使用

[yourWindow setCanHide:NO];
ProcessSerialNumber psn = { 0, kCurrentProcess };
TransformProcessType(&psn, kProcessTransformToUIElementApplication);

一旦代码运行以隐藏应用程序图标,请使用[yourWindow setCanHide:YES];,以便在其他进程期间隐藏窗口。(例如,这可能有助于防止在您切换“显示应用程序图标”按钮时隐藏首选项窗口,但仍希望在您与应用程序的其他窗口交互时隐藏首选项窗口。

于 2013-07-30T20:40:58.743 回答
1

该应用程序的窗口没有关闭,而是隐藏了,因为该应用程序被隐藏了。

在不隐藏窗口的情况下隐藏应用程序图标的更简洁的解决方案是这样,之后会取消隐藏应用程序。并且为了防止由于隐藏然后取消隐藏窗口而导致闪烁,它还暂时禁用了它们的隐藏:

// Disable our windows from getting hidden
NSMutableArray<NSWindow*> *windowsThatCanHide = [NSMutableArray array];
for (NSWindow *w in NSApp.windows.copy) {
    if (w.canHide) {
        [windowsThatCanHide addObject:w];
        w.canHide = NO;
    }
}

// Remove icon from Dock (Note: This also inevitably hides the menu bar!)
TransformProcessType(&psn, kProcessTransformToUIElementApplication);

// Re-activate this app and re-enable the hiding of windows.
dispatch_async(dispatch_get_main_queue(), ^{
    for (NSWindow *w in windowsThatCanHide) {
        w.canHide = YES;
    }
    [NSApp unhide:self];
});
于 2021-04-27T16:13:11.077 回答