Cocoa 退出可可的其他应用程序
我需要退出cocoa中的其他应用程序。我有一个通知中的userInfo字典,它告诉我应用程序的名称。我尝试了terminate和forceTerminate方法,但它们不起作用(我认为它们仅在雪豹中可用)。您可以向应用程序发送一个quit AppleeEvent,请求应用程序退出,但我认为您无法在没有提升权限的情况下强制应用程序退出。查看一下框架,了解发送所需事件的最佳方式。我们使用Cocoa 退出可可的其他应用程序,cocoa,Cocoa,我需要退出cocoa中的其他应用程序。我有一个通知中的userInfo字典,它告诉我应用程序的名称。我尝试了terminate和forceTerminate方法,但它们不起作用(我认为它们仅在雪豹中可用)。您可以向应用程序发送一个quit AppleeEvent,请求应用程序退出,但我认为您无法在没有提升权限的情况下强制应用程序退出。查看一下框架,了解发送所需事件的最佳方式。我们使用-[NSWorkspace runningApplications]。它要求10.6或更高 void SendQu
-[NSWorkspace runningApplications]
。它要求10.6或更高
void SendQuitToProcess(NSString* named)
{
for ( id app in [[NSWorkspace sharedWorkspace] runningApplications] )
{
if ( [named isEqualToString:[[app executableURL] lastPathComponent]])
{
[app terminate];
}
}
}
否则,您将不得不使用AppleScript。你可以做一些老生常谈的事情,比如:
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);
}
最好的解决方案(考虑到OSX最后3-4个版本中可用的所有不同API)是使用AppleScript。只要在Obj-C/Python/Java中生成所需的脚本,不管您实际使用的是什么(我假设是Obj-C,因为您特别提到“在Cocoa中”)。并使用NSAppleScript类执行它(一个虚构的示例):
这将有效地运行一个脚本(如果appName是“Safari”),该脚本如下所示:
tell application "Safari"
quit
end tell
或者看看这个问题
如果你没有300分,你怎么能获得赏金?@boyfarrell-我把赏金放在上面了。这很好,但并不适用于所有的应用程序,所以我投了更高的票,但没有奖励赏金。可以预见,如果应用程序是沙盒的,这似乎不起作用
tell application "Safari"
quit
end tell