Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 隐藏应用程序图标,同时关闭窗口_Macos_Cocoa_User Experience_Macos Carbon_Dock - Fatal编程技术网

Macos 隐藏应用程序图标,同时关闭窗口

Macos 隐藏应用程序图标,同时关闭窗口,macos,cocoa,user-experience,macos-carbon,dock,Macos,Cocoa,User Experience,Macos Carbon,Dock,要隐藏应用程序图标,请使用以下代码: ProcessSerialNumber psn = { 0, kCurrentProcess }; TransformProcessType(&psn, kProcessTransformToUIElementApplication); 此代码隐藏了图标,但也关闭了应用程序窗口。是否可以在关闭主窗口的情况下隐藏图标 [self.window setCanHide:NO]; 这不是一个解决方案,因为当用户从另一个应用程序菜单中选择“隐藏其他”时,应

要隐藏应用程序图标,请使用以下代码:

ProcessSerialNumber psn = { 0, kCurrentProcess };
TransformProcessType(&psn, kProcessTransformToUIElementApplication);
此代码隐藏了图标,但也关闭了应用程序窗口。是否可以在关闭主窗口的情况下隐藏图标

[self.window setCanHide:NO];
这不是一个解决方案,因为当用户从另一个应用程序菜单中选择“隐藏其他”时,应用程序将不会被隐藏


谢谢

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

ProcessSerialNumber psn = { 0, kCurrentProcess };
TransformProcessType(&psn, kProcessTransformToUIElementApplication);
如果您希望它在其他时间隐藏自己,您可以尝试使用

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

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

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

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];
});
//禁止隐藏我们的窗口
NSMutableArray*windowsThatCanHide=[NSMutableArray];
用于(NSApp.windows.copy中的NSWindow*w){
如果(w.canHide){
[可隐藏添加对象的窗口:w];
w、 canHide=NO;
}
}
//从Dock中删除图标(注意:这也不可避免地隐藏了菜单栏!)
TransformProcessType(&psn、KProcessTransformToielementApplication);
//重新激活此应用程序并重新启用windows隐藏。
dispatch\u async(dispatch\u get\u main\u queue()^{
用于(可隐藏窗口中的NSW窗口*w){
w、 canHide=是;
}
[NSApp unhide:self];
});

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

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

// 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];
});
//禁止隐藏我们的窗口
NSMutableArray*windowsThatCanHide=[NSMutableArray];
用于(NSApp.windows.copy中的NSWindow*w){
如果(w.canHide){
[可隐藏添加对象的窗口:w];
w、 canHide=NO;
}
}
//从Dock中删除图标(注意:这也不可避免地隐藏了菜单栏!)
TransformProcessType(&psn、KProcessTransformToielementApplication);
//重新激活此应用程序并重新启用windows隐藏。
dispatch\u async(dispatch\u get\u main\u queue()^{
用于(可隐藏窗口中的NSW窗口*w){
w、 canHide=是;
}
[NSApp unhide:self];
});

我想知道热为TransformProcessType函数创建回调。很可能这是不可能的。根据您的回答,我这样做:[自执行选择器:@selector(setSuppressHideWindows:)with object:[NSNumber numberWithBool:YES]afterDelay:2];我想知道热为TransformProcessType函数创建回调。很可能这是不可能的。根据您的回答,我这样做:[自执行选择器:@selector(setSuppressHideWindows:)withObject:[NSNumber numberWithBool:YES]afterDelay:2];它不是实际关闭窗口,而是隐藏所有应用程序窗口。它不是实际关闭窗口,而是隐藏所有应用程序窗口。