open コマンド FAQ
内容 (What's Covered)
Q. open コマンドを使用していますが、「メモリ不足」というエラーが出てアプリケーションを起動することができません。
Q. Netscape や Internet Explorer のようなブラウザを起動したいのですが。
Q. 起動した外部アプリケーションが終了したら、再度プロジェクタを起ち上げたいのですが。
Q. プロジェクタから open でさらにプロジェクタを起動したいのですが。(プロジェクタの二重起動)
Q. Windows で外部 exe を起動する際にパラメータを渡したいのですが。
Q: エンドユーザのコンピューターで Shockwave はアプリケーションを起動することができるか?
Q: Director は "open" 経由でアプリケーションを起動した後にそれをコントロールすることができるのか?。また、Director がアプリケーションを閉じたりサイズやウィンドウの位置などをコントロールする事ができるのか?
Q. open コマンドを使用していますが、「メモリ不足」というエラーが出てアプリケーションを起動することができません。
A. 実際にメモリ不足の場合もありますが、ほとんどの場合はアプリケーションをフルパスで指定していない為です。フルパスで指定していなくても起動するアプリケーションがあるため混乱を招くのですが、基本的にはフルパスで指定するようにして下さい。ハードディスク内に複数あるアプリケーション(例.SimpleText) は、ほぼ確実にこの「メモリ不足」というエラーが出ます。フルパスが分からない場合は、FileIO Xtra のダイアログ等を使って、ユーザーに指定してもらう方法を考えましょう。ついでにそのパスを FileIO で保存しておけば、初回のみパスを指定してもらうだけで済みます。
(パスに関しては下記のサードパーティの XTRA 情報もご確認ください。)
Q. Netscape や Internet Explorer のようなブラウザを起動したいのですが。
A. この場合は open コマンドよりも goToNetPage コマンドの方がスムーズです。(Director6J 以降をご利用下さい。)こちらを使用しましょう。また、'gotoNetPage' を使って、ローカルの HTML 書類を開くこともできます。URL の指定は実際に HTML ファイルをブラウザで表示させたときにブラウザに表示される URL と同じように記述します。たとえば、ムービーと同階層にある「Readme.htm」というファイルをブラウザで開くには、つぎのようなステートメントを書くことができます。
[例]
gotoNetPage the moviePath & "Readme.htm"
ただ、この方法では、ローカルのファイルを開くにも拘わらず、ブラウザの設定によってはネットに接続にいってしまうことがあります。そうしますと、ネットに接続していない PC ではエラーになってしまいます。
これを避けるために、'open' コマンドを使うやり方があります。'open' コマンドですから書類を開くには、そのファイルだけでなく、アプリケーションのパスも必要になります。ブラウザのパスは、'browserName()' 関数で取得することができます。
よって、上の例を 'open' コマンドで記述し直すと、つぎのようになります。
[例]
open the moviePath & "Readme.htm" with browserName()
しかし、'open' コマンドを使った方法では、Macintosh の場合はブラウザがすでに起動している時は、アプリケーションがブラウザに切り替わるだけで、書類は開かないのでご注意下さい。
Q. 起動した外部アプリケーションが終了したら、再度プロジェクタを起ち上げたいのですが。
A. これは Director の基本機能だけでは不可能です。Xtra の力を借りることになります。Zeus Production の zLaunch Xtra 等をお使い下さい。ただし、起動した外部アプリケーションがインストーラの場合には、システムの再起動を求められる場合があることに注意が必要です。
Q. プロジェクタから open でさらにプロジェクタを起動したいのですが。(プロジェクタの二重起動)
A.このような使用については想定していないため、弊社ではテストを行っておりません。基本的には go to movie でムービーを飛ばす、もしくはムービー内ウインドウ(MIAW)として、次のムービーに移動してください。
Q. Windows で外部 exe を起動する際にパラメータを渡したいのですが。
A. このような使用方法は想定していない為、細かなテストは行われておりませんが一応可能です。open the pathName & "xxxx.exe -h" のような形でパラメータを渡してください。
また、サードパーティの Xtraに は、パラメータを渡して外部プログラムを起動できるものがあります。例えば、後述「(参考情報)Buddy API」の 'baRunProgram' メソッドをご参照ください。
Q: エンドユーザのコンピューターでShockwaveはアプリケーションを起動することができるか?
A: Shockwave では、ウェブブラウザーでのセキュリティを考慮し、特定の操作の制限や禁止事項が存在します。アプリケーションの起動は Shockwave の中で禁止される機能の典型的なもののひとつです。
Lingo "open"の使用は Shockwave 内でスクリプトエラーを起こします。
Q: Directorは"open"経由でアプリケーションを起動した後にそれをコントロールすることができるのか?。また、Directorがアプリケーションを閉じたりサイズやウィンドウの位置などをコントロールする事ができるのか?
A:Director または Lingo は単独で利用することはありません。アプリケーションのコントロールは BuddyAPI の様なサードパーティ製の XTRA を必要とします。
(参考情報)Buddy API
起動関連の情報に関してまして、サードパーティのエクストラを使う方法をご紹介します。ただし、こちらはサードパーティ製の XTRA となりますので、弊社でのサポートは一切行っておりません。参考情報としてご利用下さい。ご注意下さい。(なお、こちら記事に関しまして何か情報などございましたら、以下のアンケートをご利用下さい。)
こちらの XTRA に関しては以下の URL からのリンクをご参照ください。
http://www.macromedia.com/software/xtras/director/
(1)アプリケーションの起動
LINGO「open」をご利用いただくにはアプリケーションまでのパスを絶対パスで認識しなくてはなりません。Director からはそのパスを認識することができませんので、こちらの XTRA を使用すると便利です。'bafindapp' というメソッドは与えたパラメータと関連づけられたアプリケーションのパスを返します。こちらを利用してアプリケーションパスを探すことができます。
また、直接起動するには以下のような方法があります。
(例)現行ムービーと同じ階層にあるフォルダ「PDF」中の PDF ファイル「ドキュメント.PDF」を開く場合には、以下のように 'baOpenFile' メソッドを使用します。
[Windowsの場合]
Result = baOpenFile(the moviePath & "PDF¥ドキュメント.PDF", "normal")
[Macintoshの場合]
Result = baOpenFile(the moviePath & "PDF:ドキュメント.PDF", empty)
Result には実行結果に応じた整数のエラーコードが返ります。32 以下の数字はエラーです。第 2 パラメータは、Macintosh では無効です。ただし、第 2 パラメータを指定しないとスクリプトエラーになるので、空白(empty)を入れます。Windows の場合は、第 2 パラメータで、開いたウィンドウの状態を指定できます。"normal" が通常、"hidden" は不可視、"maximised" が最大化、"minimised" は最小化です。
(追加情報)アプリケーション起動時のスタート画面をしたくない
例えば Adobe Acrobat Reade は、起動時にロゴの入ったスタート画面を表示します。Windows では、コマンドラインにパラメータ「/s」を与えることにより、この表示をなくすことができます。この場合も、Buddy API でコマンドラインを与えての実行が可能です。メソッドは 'baRunProgram' を使用します。
[使い方]
Result = baRunProgram(実行コマンド, ウインドウの状態, 待ちの指定)
「実行コマンド」は、実行プログラムやパラメータなどのコマンドラインをそのまま指定します。第2パラメータの「ウィンドウの状態」は、'baOpenFile' と同様です。「待ちの指定」は、実行した外部プログラムの終了までムービーの再生を止めるかどうかを、'true' または 'false' で指定します。
注意点として、外部アプリケーションで文書ファイルを開く場合、文書ファイルのパスはロングネームの使用ができません。ショートネームへの変換は、BuddyAPIのメソッド'baShortFileName'でできます。また、アプリケーションのパスは、'baFindApp' メソッドにドキュメントの拡張子をパラメータとして渡すことで、取得できます。したがって、前の例と同じドキュメントを、スタート画面なしで開くには、以下のステートメントを実行します。
baRunProgram(baFindApp("PDF") && "/s" && baShortFileName(the moviePath &"PDF¥ドキュメント.PDF"), "normal", true)
Macintosh の場合は、残念ながらコマンドで実行する方法はありません。強いて行うとすれば、アプリケーションの設定そのものを変更する必要があります。<ファイル>-<環境設定>-<一般>のダイアログボックスで、「起動時にスタート画面を表示」のオプションをオフにします。この設定は、「Acrobat Reader Prefs」というファイル名で「システムフォルダ」の「初期設定」フォルダに書込まれます。ですから、「起動時にスタート画面を表示」オプションをオフにした「Acrobat Reader Prefs」ファイルを、「初期設定」フォルダにコピーすれば、スタート画面を表示しないことができます。「初期設定」フォルダのパスは、Buddy API の 'baSysFolder("prefs")'メソッドで取得することができます(Macintosh のみ。このメソッドについては文書 ID: dr0080「システムのパスを調べる方法」を参照)。ただし、この手法はユーザーの初期設定を書き替えることになりますので、元の初期設定をバックアップしておき、ムービー終了時に元に戻すなどの慎重なスクリプティングが必要とされます。
(2)ブラウザの起動
LINGO「gotonetpage」(Director6J 以降)もご利用いただけますが、Buddy API には 'baOpenURL' というメソッドがあります。インターネット書類をデフォルトブラウザで開きます。使い方は以下のとおりです。
[使い方]
result = baOpenURL(URL, 状態)
[URL]は文字どおり Web ページの URL のほか、ローカル書類のパスも指定できます。
[状態]は、Macintosh と Windows でパラメータが異なります。Macintosh の場合は、Buddy API のバージョンが 1.1b と古いためだと思われますが、パラメータは無視されます。もっともパラメータを入れないとスクリプトエラーになりますので、""(empty)を入れておきます。Windows では、開いたウィンドウの状態をパラメータとして指定します。"Normal" が普通の状態、"Hidden" は隠す、"Maximised" は最大化、"Minimised" が最小化になります。
'result ='はなくても動作します。このメソッドは、ブラウザが見つかり、起動に成功すれば1を、そうでなければ0を返します。ですから、その結果によって、以降の処理を分岐させることができます。
複数のブラウザがインストールされている場合、Directorの内部コマンド('gotoNetPage'や'open')を使ったときと、'baOpenURL' を使用したときとで、起動するブラウザが違うこともあります。これは、Director と Buddy API とでブラウザの検索の仕方が異なるためです。
ローカル書類を開く場合には、'baOpenURL' メソッドのほかに、'baOpenFile' メソッドもあります。使い方は、'baOpenURL' と同じです。Buddy API 3.3 のマニュアルでは、ローカル HTML ファイルを開くときは 'baOpenFile' の方が安定しているとされています。
以下は、Macintosh と Windows のクロスプラットホームに対応したスクリプトのサンプルです。
-- [URL をブラウザで開く - クロスプラットホーム]
on xGotoNetPage sURL, sState
if the platform contains "Mac" then -- Mac の場合
sState = empty
else -- Windowsの場合
if voidP(sState) then -- 状態の指定がないとき
sState = "Normal"
end if
end if
bResult = baOpenURL(sURL, sState)
return bResult
end
ムービースクリプトにすれば、メッセージウィンドウで確認できます。最後に 'return' で結果を返していますので、成功すれば1が返ります。
[メッセージウィンドウでのテスト例]
put xGotoNetPage( "http://www.macromedia.com/jp/support/director/")
-- 1
(3)追加情報----ブラウザが背面に隠れてしまう
起動したブラウザがプロジェクタの背面に隠れてしまうケースがありますが、Buddy API を使ってこの現象に対応することができます。使用するメソッドは 'baNextActiveWindow' と 'baActivateWindow' です。
'baNextActiveWindow' は、つぎにアクティブになるウィンドウのハンドル(ID 番号)を返します。いつまで監視し続けるかを、タイムアウトとして 'ticks' で指定します。タイムアウトを 0 にすると、無期限になります。他のウィンドウがアクティブになることなくタイムアウトの時間を過ぎると、'baNextActiveWindow' は 0 を返して、監視を終えます。
[使い方]
result = baNextActiveWindow(タイムアウト)
'baActivateWindow' は、その名のとおり指定したウィンドウをアクティブにします。
ウィンドウはハンドル(ID番号)を整数で指定します。成功すれば1、しなければ0を返
します。
[使い方]
result = baActivateWindow(ハンドル)
処理の考え方としては、ブラウザを開いた直後に 'baNextActiveWindow' で監視し、つぎにアクティブになるはずの HTML 書類のウィンドウハンドル(ID番号)を取得します。取得できたら、そのウィンドウを 'baActivateWindow' でアクティブにします。
以下のサンプルビヘイビアをボタンに設定し、クリックすると開いた URL のウィンドウを前面にもってきます。これは、ユーザーがブラウザの起動を待ちきれず、ボタンを何度もクリックしてしまったような場合の対応にもなります。
-- [開いたウィンドウを前面にもってくるサンプルビヘイビア]
property psURL, pnTimeOut, pnWinHandle
on beginSprite me
psURL = "http://www.macromedia.com/jp/support/director/"
pnTimeOut = 10 -- ブラウザの起動を監視する時間(秒)
end
on mouseUp me
gotoNetPage(psURL)
pnWinHandle = baNextActiveWindow(60 * pnTimeOut)
end
on exitFrame me
if voidP(pnWinHandle) then exit
baActivateWindow(pnWinHandle)
pnWinHandle = void
end
まず、初期化処理を 'beginSprite' ハンドラで行っています。ここでは、プロパティとして開く URL(psURL)とタイムアウト時間(pnTimeOut)を設定しました(プロパティについては『Lingo辞書』かオンラインヘルプの 'property' をご参照ください。また、TechNotes ID: dr016876 「ビヘイビアのインスタンスとメッセージ(1)」参照)。そして、'mouseUp' で URL を開くとともに 'baNextActiveWindow' でウィンドウのハンドルをプロパティ pnWinHandle に取得します。
つぎに、'exitFrame' ハンドラの処理です。ブラウザが起動し URL のウィンドウが開くまで、pnWinHandle には値が格納されません。つまり 'void' です。したがって、その間は 'exitFrame' の最初のステートメントで処理から外れます('exit')。ハンドルが取得されて初めて 2 行目のステートメント 'baActivateWindow(pnWinHandle)' が実行され、ウィンドウは前面にきます。そうしたら、3 行目で改めて pnWinHandle を 'void' に設定し直します。
| : | 2006-04-22 |
|---|---|
| : | 228538 |
| : | Macintosh, Windows |
| : | MX2004, MX, 8.5x, 6.0, 6.5 |
| : | http://go.adobe.com/kb/ts_228538_ja-jp |
| : | director |