タイトルBrowsing Mac OS X》Launch Serviceを使ってみるカテゴリーMac OS X, Browsing Mac OS X
作成日2001/4/20 15:36:13作成者新居雅行
Mac OSには、アプリケーションから、別のアプリケーションを開くといった機能を組み込むために、LaunchApplicationというAPIコールを用意していた。この呼び出しは単にアプリケーションを別に起動するというだけでなく、アプリケーションを開いて指定の文書を開くといったこともできるような高機能なAPIであった。Mac OSでのユーティリティなどでお世話になったプログラマも多いことだろう。しかし、CarbonやMac OS Xとなると、このLaunchApplicationの様子が違うのである。この呼び出しはサポートされてはいて、アプリケーションの起動はできるのであるが、指定した文書を開かせることが、簡単にはできそうにないのだ。というのも、開かせる文書を、AppleEventに附随させるパラメータの形式で与えるわけだが、Carbonではディスクリプタの形式はブラックボックスになっているため、LaunchApplicationのパラメータに与える形式のデータの構築が、どうもできないようなのである。絶対にできないとは言い切れないとは思うが、そうして大変なことをするよりも、新たに加わったLaunch Servicesという機能を使うほうがよっぽど楽にプログラミングができる。ただし、Carbonというよりも、Mac OS Xに存在するフレームワークなので、CarbonLibには含まれない。したがって、Mac OS 9.1までのシステムでは機能しないので、Mac OS X専用アプリケーションで使える手段となる。数日前に、Technical Notesで、その内容について掲載されたが、簡単なものだったので、少し詳しくこのコーナーでお届けしよう。

◇TN2017:Using Launch Services for discovering document binding and launching applications
 http://developer.apple.com/technotes/tn/tn2017.html

この文書にあるように、詳しく知りたい人はLaunchServices.hというヘッダを見てほしいとなっている。事実、ヘッダにはしっかりとAPI解説文書が書き込まれているので、まずはそれを御覧いただくのがやはり早道だろう。Project Builderですぐにヘッダを開くには、Command+shift+Dというキー操作を行い、表示されたダイアログボックスでヘッダファイル名をキータイプするという手もある。
CarbonLibには含まれないものではあるが、LaunchServices.hはヘッダのCarbon.hから読み込まれる範囲にあるので、いずれにしても、Carbon対応アプリケーションでは例外なく利用できるであろう。なお、Cocoa環境では、NSWorkspaceというクラスに、アプリケーションを起動したり、あるいは文書を指定したアプリケーションで起動するという機能が利用できる。今回の記事では、Launch ServicesをC言語で使う方法を説明しよう。今回は概要を示し、別の日にお届けする記事でサンプルプログラムを掲載しよう。

まず、Launch Services全体にかかわることとして、ファイルの参照はFSRefを使う。FSSpecではなく、FSRefなので、FSSpecで作っているアプリケーションは、File ManagerのFSpMakeFSRefを使うなどして、FSRefを得ればよいだろう。
そして、Launch ServicesはURLを利用して処理対象を指定することもできる。そのときにはCore FoundationのURL Seriviceを利用する。URLで処理をする場合には、Core Foundationの処理についてもあらかじめチェックをしておこう。
実際にアプリケーションでLaunch Servicesを使う場合には、アプリケーションの最初にLSInit()、アプリケーションの最後にLSTerm()を呼び出しておく。この呼び出しはフレームワークやライブラリでは必要無いがアプリケーションでは必要になる。
あとは、規定のAPIコールを使うだけと言えばそれまでだ。設定に必要な構造体の定義もいくつかあるが、決して複雑怪奇なものではない。基本的な利用は、ストレートにデータを与えるだけだと言ってもいいだろう。FSRefで起動したり文書を開いたりするのは、LSOpenFromRefSpecというAPIコールですべて事足りる。そこで使う構造体はLSLaunchFSRefSpecで、これにアプリケーションへのFSRefや開く文書のFSRefを指定する。すぐにでも使いたい人はヘッダファイルのこのあたりを重点的に見てもらえば良いだろう。
(この項、別の日の記事に続く)
関連リンク