NSWorkspace を使用しNSWorkspaceDidActivateApplicationNotification
て、アクティブなアプリケーションがいつ変更されたかを検出しています。NSRunningApplication
通知の userInfo キーから取得します。
アクティブなドキュメントが変更されたときに通知を受け取る必要があります。アクセシビリティ フレームワークのNSAccessibilityDocumentAttribute
キーを使用して、アクティブなドキュメントを取得できますAXUIElementCopyAttributeValue()
。
ポーリング以外でドキュメントの変更をより正確に検出する方法が必要です。複数のウィンドウを使用するアプリケーションもあれば、複数のタブを持つ 1 つのウィンドウを使用するアプリケーションもあります。タブ付きアプリケーションでは、ウィンドウは現在表示されているドキュメントを返します。
アクセシビリティ フレームワークを使用する必要はありません。AppleScript (スクリプト ブリッジ) もウィンドウのドキュメントを取得できるようですが、アクセシビリティ フレームワークはより多くのアプリケーションで動作するようです。
アクティブなドキュメント、アクティブなウィンドウ、アクティブなアプリケーションだけを気にします。現在、システムに焦点を当てているもの。
Sublime Text 2 や Xcode などのアプリケーションでテストしてきました。Sublime は現在選択されているタブを返し、Xcode はアクティブなプロジェクトを返します。