2015-01-15 11 views
5

実行中のアプリケーションバンドルのリストを取得しようとしています。 Dockが表示されているかのように、ユーザーが起動したGUIアプリケーション、またはActivity Monitor(特定のプロセスの横にアイコンが表示されます)。私は、sysctl()KERN_PROC_ALLを使用して、実行中のすべてのプロセスのリストを取得することができましたが、それはどのアプリケーションバンドルから来たのかわかりません。 Minecraftのようなアプリケーションはjavaと表示されていますが、あまり役に立ちません。OS Xでプログラムバンドルをプログラムで実行する

私はアクティビティモニタでのプロセスのグループ名は、私が知りたいのおおよそ何を示していることを知りました: Activity Monitor Showing Minecraft Launcher Running http://gdries.nl/activmon.png

実装言語は重要ではありません。現在Cで動作していますが、他の環境が必要であることが判明してもそれは問題ではありません。私がしたいのは、ユーザーが実行しているアプリケーションを検出するだけで、それぞれが使用された時間を記録することができます。 (ペアレンタルコントロールは類似しているが、解析できないplistファイルに記録する)

+0

「ps」ユーティリティのコードをダウンロードし、必要なものを使用してください。 – user3629249

+0

'ps'はプロセスを知っているだけで、プロセスがどのアプリケーションのバンドルであるのか、それともアプリケーションバンドルのようなものがあるのか​​分かりません。それは私に 'sysctl'、' KERN_PROC_ALL'と 'KERN_PROCARGS'ですでに得られているのと同じ情報を与えます(しかし、後者の形式は秘密で文書化されていません)。 –

答えて

7

私はSwiftとCocoa APIを使ってそれを行う方法を見つけました。おそらくこれもプレーンCを使って可能であるべきですが、これは私のアプリケーションには十分です。

import Foundation 
import Appkit 

// Get all running applications 
var workspace = NSWorkspace.sharedWorkspace() 
var applications = workspace.runningApplications 

for app in applications { 
    println(app) 
} 

app NSApplicationのオブジェクトであり、それは私が知りたいと思ったものですバンドル識別子を、持っています。

+1

Swift 4では 'NSWorkspace.sharedWorkspace()'の代わりに 'NSWorkspace.shared'が働いてくれました。 – Roman

関連する問題