要删除Dock中的应用程序图标,我使用以下代码:
ProcessSerialNumber psn = { 0, kCurrentProcess };
TransformProcessType(&psn, kProcessTransformToUIElementApplication);
此代码隐藏Dock中的图标,但也会关闭应用程序窗口。是否可以在不关闭主窗口的情况下隐藏图标?
[self.window setCanHide:NO];
这不是一个解决方案,因为当用户从另一个应用程序菜单中选择Hide Others
时,应用程序将不会被隐藏。
我不确定我是否理解你在最后一句"这不是一个解决方案,因为当用户从另一个应用程序菜单中选择隐藏其他应用程序时,应用程序将不会被隐藏。"
ProcessSerialNumber psn = { 0, kCurrentProcess };
TransformProcessType(&psn, kProcessTransformToUIElementApplication);
如果你想让它在其他时候隐藏起来,你可以尝试使用
[yourWindow setCanHide:NO];
ProcessSerialNumber psn = { 0, kCurrentProcess };
TransformProcessType(&psn, kProcessTransformToUIElementApplication);
一旦运行了隐藏应用程序图标的代码,请使用[yourWindow setCanHide:YES];
,以便在其他过程中隐藏该窗口。(例如,当您切换"显示应用程序图标"按钮时,这可能有助于防止首选项窗口隐藏,但当您与应用程序的其他窗口交互时,仍然需要隐藏首选项窗口。
应用程序的窗口并没有关闭,只是因为应用程序被隐藏了。
隐藏应用程序图标而不隐藏窗口的一个更干净的解决方案是这样,它会在之后取消隐藏应用程序。为了防止由于隐藏,然后取消隐藏窗口而导致的闪烁,它还暂时禁用了它们的隐藏:
// 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];
});