2011-03-13 25 views
5

Tôi cần phải thoát khỏi các ứng dụng khác trong ca cao. Tôi có một từ điển userInfo từ một thông báo cho tôi biết tên của ứng dụng. Tôi đã thử các phương pháp chấm dứt và forceTerminate, nhưng họ đã không làm việc (Tôi nghĩ rằng họ chỉ có sẵn trong báo tuyết.)Bỏ các ứng dụng khác trong ca cao

+0

Nếu bạn không có 300 điểm, bạn có thể kiếm tiền thưởng bằng cách nào? –

+2

@boyfarrell - Tôi đặt tiền thưởng vào đó. – pasawaya

Trả lời

2

Bạn có thể gửi ứng dụng AppleEvent thoát, yêu cầu ứng dụng thoát, nhưng tôi không nghĩ rằng bạn có thể buộc ứng dụng phải thoát mà không có đặc quyền nâng cao. Hãy nhìn vào khuôn khổ Scripting Bridge cho cách Cocoa-y nhất để gửi các sự kiện cần thiết.

3

Chúng tôi sử dụng -[NSWorkspace runningApplications]. Nó đòi hỏi 10.6 hoặc cao hơn.

void SendQuitToProcess(NSString* named) 
{ 

    for (id app in [[NSWorkspace sharedWorkspace] runningApplications]) 
    { 
     if ([named isEqualToString:[[app executableURL] lastPathComponent]]) 
     { 
      [app terminate]; 
     } 
    } 

} 

nếu không, bạn sẽ phải sử dụng AppleScript. Bạn có thể làm điều gì đó ủy mị như thế này:

void AESendQuitToProcess(const char* named) 
{ 
    char temp[1024]; 

    sprintf(temp, "osascript -e \"tell application \\\"%s\\\"\" -e \"activate\" -e \"quit\" -e \"end tell\"", named); 

    system(temp); 
} 
+0

Có vẻ ổn, tôi sẽ thử nghiệm sau ngày hôm nay. – pasawaya

3

Các giải pháp tốt nhất (chiếm tất cả các API khác nhau có sẵn trong 3-4 phiên bản mới nhất của OS X) sẽ được sử dụng AppleScript. Chỉ cần tạo ra các kịch bản cần thiết trong Obj-C/Python/Java bất cứ điều gì nó là bạn đang thực sự sử dụng (Tôi giả sử Obj-C kể từ khi bạn nói cụ thể 'Trong ca cao'). Và thực hiện nó bằng cách sử dụng lớp NSAppleScript (một ví dụ contrived):

// Grab the appName 
NSString *appName = [someDict valueForKey:@"keyForApplicationName"]; 
// Generate the script 
NSString *appleScriptString = 
    [NSString stringWithFormat:@"tell application \"%@\"\nquit\nend tell", 
           appName]; 
// Execute the script 
NSDictionary *errorInfo = nil; 
NSAppleScript *run = [[NSAppleScript alloc] initWithSource:theScript]; 
NSAppleEventDescriptor *theDescriptor = [run executeAndReturnError:&errorInfo]; 
// Get the result if your script happens to return anything (this example 
// really doesn't return anything) 
NSString *theResult = [theDescriptor stringValue]; 
NSLog(@"%@",theResult); 

này có hiệu quả chạy một kịch bản đó (nếu AppName là 'Safari') trông giống như:

tell application "Safari" 
quit 
end tell 

Đó hoặc kiểm tra này SO câu hỏi

Terminating Another App Running - Cocoa

+0

Điều này là tốt nhưng nó không hoạt động cho tất cả các ứng dụng, vì vậy tôi upvoted nhưng không giải thưởng tiền thưởng. – pasawaya

Các vấn đề liên quan