2011-01-07 34 views

Trả lời

3

Giả sử này được nhắm mục tiêu cho 10,6, bạn có thể sử dụng cùng với NSRunningApplicationNSWorkspace. Trước tiên, bạn nên xác định xem các ứng dụng đang chạy sử dụng:

[[NSWorkspace sharedWorkspace] runningApplications] 

Nếu nó không hoạt động, sau đó bạn có thể khởi chạy nó bằng cách sử NSWorkspace, nhưng tôi khuyên bạn nên gọi mới hơn, launchApplicationAtURL:options:configuration:error:, mà sẽ trả về một NSRunningApplication, mà bạn có thể sử dụng để chấm dứt ứng dụng. Xem NSWorkspace để biết thêm chi tiết.

7

trước đây Như đã đề cập nó khá dễ dàng để khởi động các ứng dụng khác với sự giúp đỡ của lớp NSWorkspace, ví dụ:

- (BOOL)launchApplicationWithPath:(NSString *)path 
{ 
    // As recommended for OS X >= 10.6. 
    if ([[NSWorkspace sharedWorkspace] respondsToSelector:@selector(launchApplicationAtURL:options:configuration:error:)]) 
     return nil != [[NSWorkspace sharedWorkspace] launchApplicationAtURL:[NSURL fileURLWithPath:path isDirectory:NO] options:NSWorkspaceLaunchDefault configuration:nil error:NULL]; 

    // For older systems. 
    return [[NSWorkspace sharedWorkspace] launchApplication:path]; 
} 

Bạn phải làm việc nhiều hơn một chút để bỏ một ứng dụng khác, đặc biệt nếu mục tiêu là trước 10.6, nhưng nó không quá khó. Dưới đây là ví dụ:

- (BOOL)terminateApplicationWithBundleID:(NSString *)bundleID 
{ 
    // For OS X >= 10.6 NSWorkspace has the nifty runningApplications-method. 
    if ([[NSWorkspace sharedWorkspace] respondsToSelector:@selector(runningApplications)]) 
     for (NSRunningApplication *app in [[NSWorkspace sharedWorkspace] runningApplications]) 
      if ([bundleID isEqualToString:[app bundleIdentifier]]) 
       return [app terminate]; 

    // If that didn‘t work then try using the apple event method, also works for OS X < 10.6. 

    AppleEvent event = {typeNull, nil}; 
    const char *bundleIDString = [bundleID UTF8String]; 

    OSStatus result = AEBuildAppleEvent(kCoreEventClass, kAEQuitApplication, typeApplicationBundleID, bundleIDString, strlen(bundleIDString), kAutoGenerateReturnID, kAnyTransactionID, &event, NULL, ""); 

    if (result == noErr) { 
     result = AESendMessage(&event, NULL, kAEAlwaysInteract|kAENoReply, kAEDefaultTimeout); 
     AEDisposeDesc(&event); 
    } 
    return result == noErr; 
} 
Các vấn đề liên quan