2009-06-12 8 views
1

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

私は、次のコード

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

を使用して、他のすべてのアプリケーションを非表示にすることができます知っている。しかし、それは、例えばサファリを言うだけの1特定のアプリケーションを非表示にすることはできますか?

答えて

6

あなたはAppleScriptのでそれを行うことができます。

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

または呼び出すことによって、ココアの中から同じ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]; 
+0

ありがとうございました、これはおそらくサファリの罰金ですが、あなたは彼らのようないくつかの他のアプリのためにそれをハードコーディングしたくないだろうと完全に –

+4

注意を働きますプロセス名は、ユーザーの好みに合わせてローカライズすることができます –

3

それとも、アップルスクリプトを避け、代わりにバンドル識別子を使用したい場合にマイクのようにローカライズできるアプリケーション名:

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

電子の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]; 
} 
関連する問題