2009-06-12 11 views
1

Ist es möglich, eine bestimmte Anwendung mit Kakao zu verstecken?Kakao: Eine Anwendung ausblenden

Ich weiß, Sie alle anderen Anwendungen verbergen können Sie den folgenden Code

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

verwenden, aber ist es möglich, Safari nur eine bestimmte Anwendung zu verstecken sagen zum Beispiel?

Antwort

6

Sie können es mit Applescript tun:

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

oder rufen Sie die gleichen Apple aus Kakao durch den Aufruf:

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]; 
+0

Danke, funktioniert perfekt –

+4

Beachten Sie, dass während dies für Safari wahrscheinlich in Ordnung ist, würde man es nicht für einige andere Anwendungen codieren wollen als ihre Der Prozessname kann lokalisiert werden, um den Benutzereinstellungen zu entsprechen –

3

Oder wenn Sie Apple Script und verwenden Sie die Bundle-Bezeichner anstatt zu vermeiden des Anwendungsnamens, der lokalisiert werden könnte, wie Mike darauf hinwies:

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); 
    } 
} 
7

Wenn Sie ar e Mac OS 10.6+ Targeting, können Sie die neue NSRunningApplication-Klasse verwenden:

- (BOOL) hideAppWithBundleID:(NSString *)bundleID 
{ 
    NSArray *apps = [NSRunningApplication runningApplicationsWithBundleIdentifier:bundleID]; 
    if ([apps count] == 0) 
     return NO; 
    return [(NSRunningApplication *)[apps objectAtIndex:0] hide]; 
}