LAUNCH EXTERNAL PROCESSコマンドでファイルを開くにはどうすれば良いのですか
LAUNCH EXTERNAL PROCESSコマンドは、ファイルを開くコマンドではなく実行するコマンドです。
背景
特定のファイル形式(たとえばPDFファイル)をデフォルトのアプリケーションを起動して開きたい場合、または特定のファイル形式(たとえばタブ区切りの標準テキストファイル)を特定のアプリケーション(たとえばMicrosoft Excel)を起動して開きたい場合、以前はAP_SublaunchやAP_ShellExecuteが使用されていました。
いずれのプラグインコマンドも現在では古いものであり、4D v11 SQLでは4D Packから除去されました。いずれも、LAUNCH EXTERNAL PROCESSコマンドで代用することができます。
同期モードと非同期モード
LAUNCH EXTERNAL PROCESSは、1個または4個の引数を渡して呼び出すコマンドです。本来の用途は、4個すべての引数を使用し、返り値とエラーストリームを受け取る関数としての外部プロセスコールですが、簡易的な用法として、1個の引数だけを使用し、単純に外部コマンドを実行することもできます。
Mac OS Xの場合
Mac OS Xの場合、LAUNCH EXTERNAL PROCESSは、Darwin(UNIX)コマンドをコールすることに相当します。つまり「ターミナル」のコマンドラインに命令を入力することに対応します。使用にあたっては、次の点に留意して下さい。
4D 2004
第一引数をテキスト型で渡した場合、4Dのローカルエンコーディング(日本語版はShift_JIS)からUTF-8への変換が内部的に行なわれます。
第一引数をBLOB型で渡した場合、こうした変換は行なわれません。
4D v11 SQL(Unicodeモード)
第一引数をテキスト型で渡した場合、4Dのローカルエンコーディング(国際的にUTF-16)からUTF-8への変換が内部的に行なわれます。
第一引数をBLOB型で渡した場合、こうした変換は行なわれません。
パススタイルについて
Darwin(UNIX)が期待しているのは、Mac OS Xで親しまれているHFSスタイル(コロン区切り)ではなく、POSIXスタイル(スラッシュ区切り)です。
LAUNCH EXTERNAL PROCESSは、POSIXスタイルのパスを受け取ります。
HFSスタイルのパスは、基本的に次の方法でPOSIXに変換することができます。
- コロンをスラッシュに置換します。
- 半角スペースは「バックスラッシュ+スペース」に置換します。
- 起動ボリュームであればボリューム名を除去、違えば"/Volumes/"を冒頭に追加します。
コーディング例
アプリケーションを暗示的に指定
AP_SublaunchやAP_ShellExecuteのように、アプリケーションを特に指定せず、システムのデフォルトアプリケーションでファイルを開きたい場合、Darwinのコマンドopenをオプションなしで使用します。
LAUNCH EXTERNAL PROCESS("open "+$_POSIX_style_)アプリケーションを明示的に指定
アプリケーションをフルパスで指定する場合、Darwinのコマンドopenをオプション"-a"で使用します。
LAUNCH EXTERNAL PROCESS("open -a /Applications/Firefox.app/ "+$_POSIX_style_)アプリケーションをバンドル識別子で指定
Mac OS Xでは、置かれた場所に関係なく、アプリケーションはバンドル識別子で指定することができます。バンドル識別子は、アプリケーションパッケージ内のinfo.plistファイルで定義されており、Uniform Type Identifier (UTI)と呼ばれる形式の文字列です。
アプリケーションをバンドル識別子で指定する場合、Darwinのコマンドopenをオプション"-b"で使用します。
LAUNCH EXTERNAL PROCESS("open -b com.microsoft.excel "+$_POSIX_style_)