我想使用指定的应用程序启动文件,并且希望启动的程序立即成为最前面的窗口。
我知道我可以这样做,如下所示:
[[NSWorkspace sharedWorkspace] openFile:fileName withApplication:appName];
Run Code Online (Sandbox Code Playgroud)
然后,如果我可以获取该启动的应用程序的PID,则可以这样做以使该应用程序位于最前面:
NSRunningApplication* app = [NSRunningApplication
runningApplicationWithProcessIdentifier: PID];
[app activateWithOptions: NSApplicationActivateAllWindows];
Run Code Online (Sandbox Code Playgroud)
我的问题是:启动后立即获取此应用程序的PID的最简单,最快和最可靠的方法是什么,因此我可以确保该应用程序位于最前端?
这并不像乍看起来那样简单。例如,我需要一个进程名称,以便使用Carbon调用或通过可以访问的应用程序字典来获取PID NSRunningApplication
。但是,在一般情况下,我并不总是知道进程名称是什么,在某些情况下,进程名称是一个空字符串。
此外,我可能已经在运行同一应用程序的其他实例,并且我想始终获取刚刚启动的应用程序特定实例的PID。
谁能建议一种确定的,百分百可靠的方法来获取当前启动的应用程序的PID?
或者,是否可以使用指定的应用程序启动给定文件,以使该应用程序始终以最前面的应用程序打开?
我已经知道如何在Objective-C中使用Mac OSX Accessibility API来重新定位另一个正在运行的应用程序的窗口,而无需使用任何类型的脚本桥.
现在,我想使用相同的辅助功能API(再次,没有任何脚本桥)来关闭另一个正在运行的应用程序的所有打开的窗口.
我想在Objective-C中编写的代码应该与AppleScript代码完全相同:
tell application "TheApplication"
close every window
end tell
Run Code Online (Sandbox Code Playgroud)
我猜这是可能的,因为它在AppleScript中是允许的.