1

ココアを使用して特定のアプリケーションを非表示にすることは可能ですか?

次のコードを使用して、他のすべてのアプリケーションを非表示にできることを知っています

[[NSWorkspace sharedWorkspace] performSelectorOnMainThread:@selector(hideOtherApplications) withObject:NULL waitUntilDone:NO];

しかし、たとえばSafariなどの特定のアプリケーションを1つだけ非表示にすることは可能ですか?

4

3 に答える 3

8

Mac OS 10.6 以降をターゲットにしている場合は、新しいNSRunningApplicationクラスを使用できます。

- (BOOL) hideAppWithBundleID:(NSString *)bundleID
{
    NSArray *apps = [NSRunningApplication runningApplicationsWithBundleIdentifier:bundleID];
    if ([apps count] == 0)
        return NO;
    return [(NSRunningApplication *)[apps objectAtIndex:0] hide];
}
于 2010-05-23T22:32:21.990 に答える
6

あなたはapplescriptでそれを行うことができます:

tell application "System Events" to set visible of process "Safari" to false

または、次のように呼び出して、cocoa 内から同じ AppleScript を呼び出します。

NSString * source = @"tell application \"System Events\" to set visible of process \"Safari\" to false";
NSAppleScript * script = [[NSAppleScript alloc] initWithSource:source];
[script executeAndReturnError:nil];
[script release];
于 2009-06-12T22:47:32.180 に答える
3

または、Apple Script を避けて、Mike が指摘したようにローカライズできるアプリケーション名の代わりにバンドル識別子を使用する場合:

for (NSDictionary *app in [[NSWorkspace sharedWorkspace] launchedApplications])
{
    if ([@"com.apple.Safari" isEqualToString:[app objectForKey:@"NSApplicationBundleIdentifier"]])
    {
        ProcessSerialNumber psn;
        GetCurrentProcess(&psn); // Initialize the Process Manager
        psn.highLongOfPSN = [[app objectForKey:@"NSApplicationProcessSerialNumberHigh"] intValue];
        psn.lowLongOfPSN = [[app objectForKey:@"NSApplicationProcessSerialNumberLow"] intValue];
        ShowHideProcess(&psn, NO);
    }
}
于 2009-06-14T06:32:06.593 に答える