Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 退出可可的其他应用程序_Cocoa - Fatal编程技术网

Cocoa 退出可可的其他应用程序

Cocoa 退出可可的其他应用程序,cocoa,Cocoa,我需要退出cocoa中的其他应用程序。我有一个通知中的userInfo字典,它告诉我应用程序的名称。我尝试了terminate和forceTerminate方法,但它们不起作用(我认为它们仅在雪豹中可用)。您可以向应用程序发送一个quit AppleeEvent,请求应用程序退出,但我认为您无法在没有提升权限的情况下强制应用程序退出。查看一下框架,了解发送所需事件的最佳方式。我们使用-[NSWorkspace runningApplications]。它要求10.6或更高 void SendQu

我需要退出cocoa中的其他应用程序。我有一个通知中的userInfo字典,它告诉我应用程序的名称。我尝试了terminate和forceTerminate方法,但它们不起作用(我认为它们仅在雪豹中可用)。

您可以向应用程序发送一个quit AppleeEvent,请求应用程序退出,但我认为您无法在没有提升权限的情况下强制应用程序退出。查看一下框架,了解发送所需事件的最佳方式。

我们使用
-[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