我想知道是否有办法获得类似于强制退出应用程序列表的应用程序列表
我不知道到目前为止我所写的内容是否能让我获得这些信息。
extension ViewController: NSTableViewDelegate {
fileprivate enum CellIdentifiers {
static let NameCell = "cell"
}
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
var appName: String = ""
var appIcon: NSImage?
appName = applications[row].localizedName!
appIcon = applications[row].icon
if let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "applicationCell"), owner: nil) as? NSTableCellView {
cell.textField?.stringValue = appName
cell.imageView?.image = appIcon ?? nil
print("created")
return cell
}
return nil
}
当我调试时,我得到了所有进程,但我希望只获得一个应用列表。这是我得到的结果的一个例子:
我们可以看到有应用程序,但也有所有进程(我不希望这样做)。
答案 0 :(得分:1)
您的代码无法解释您从哪里获得applications[]
数组,但我假设它是通过{{1}获得的NSRunningApplication
个数组的数组}。
如果你只想"常规"应用程序 - 即。用户启动并出现在码头中的那种 - 您可能需要进行一些挖掘。
首先,检查应用程序是否有runningApplications()
。常规应用程序始终在一个包中,任何没有包的进程都可以忽略。
然后,您可以使用bundleURL
阅读论坛的NSBundle
文件(请参阅Info.plist
)。使用此词典,您可以判断它是否是常规应用程序(infoDictionary
是CFBundlePackageType
)。该测试将从列表中排除服务,插件等。
您还可以判断它是否是"背景"通过查看是否将APPL
属性设置为LSUIElement
,应用程序(不会出现在Dock中的应用程序)。
这应该将列表缩小到用户通常会与之交互的应用程序。