• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:fscommandで別起動したexeの終了を拾いたい)

Flash MX 2004でプロジェクタから起動したアプリケーションの終了を拾う方法

このQ&Aのポイント
  • Flash MX 2004を使用して、プロジェクタから起動したアプリケーションの終了を拾う方法について教えてください。
  • また、アプリケーションがレジストリの書き込みを行っている場合、それを判断する方法も教えてください。
  • よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#35109
noname#35109
回答No.1

この回答の前半は, 「Flash でアプリケーションを開発する」というとについての, 私の考えと,昨今の情報です。 後半が,一応の回答に近い(?)ものです。 プロジェクタ(EXE) と言っても結局 Flash ですから, Flash の ActionScript で用意されているスクリプト以外は単独では実行できません。 言い換えると,ネット上ファイルでは犯罪になるようなことはできません。 つまり,ローカル環境に対しては大したことはできません。 プロジェクタとなると,さらに不利で,できないことが多くなります(多くなりすぎます)。 プロジェクタファイル よりは, まだ HTML や HTA に貼り付けた SWFファイル の方が, VBScript や JavaScript を実行できる分, Flash外に手足を出せるので有利です。 Flash+HTA は古くからある手法です。 私は素人ですが,何かの入口になるかも↓。 Google 検索 「HTA Flash」 http://www.google.co.jp/search?hl=ja&q=HTA+Flash&lr= また,レジストリの監視や, 他アプリケーションの監視までは無理だと思いますが, 最近???(ちょっと前から)では, 次のようなものもあると言えばあります。 これまた私は素人ですが↓。 「GIZMO Developer Reference 機能一覧」 http://gizmo.anthill.jp/developer/reference/ トップページはこちら→ http://gizmo.anthill.jp/ 簡単に言うと→ http://www.anthill.jp/products.html 以上は, 少なくとも プロジェクタ(EXE) よりは見ばえが良く, また,プロジェクタよりはバキバキとローカルにアクセスできる可能性があるという方法例です。 要は, Flash はカッコイイ画面が自由自在に作れて, インターフェイスとしては見た目的に無茶苦茶優れているけど, いかんせんローカル環境には手も足も出せない役立たずのロバ以下なので, そこをなんとかしてやろうとしている努力策みたいなものです。 みなさん苦辛されていますね。 でも, ローカル環境には手も足も出せないような設計にしておかなければ, Flash が スパイウェア になったり,ウィルス配布に利用されたりする可能性がでてくるので, しかたありません。 ここを甘くすると,「Flashにセキュリティホール発見!」などと, そういう情報が好きな人や,またはアンチFlashな人にさわがれて, Flash の売り上げや Flash Player の普及率やイメージが落ちてしまいます。 Macromedia(Adobe)も必死で,ローカル環境には手も足も出せないように設計しているのです。 という Adobe も, 実は Flash が ローカル環境 では弱すぎるのがもったいないと思ったのか, 先日,2007年3月19日に, 「Apollo Runtime Alpha」 (アルファ版)というものをリリースしたそうです。 これまた当然,私は素人ですが↓。 「これがApolloだ」 Adobeの次世代デスクトップアプリ用ランタイムリリース http://codezine.jp/a/article/aid/1133.aspx > ApolloはAjaxやHTML、そしてFlashを、 > デスクトップアプリケーション上で > 簡単に組み合わせることができるランタイムだ。  ~ 中略 ~ > Apolloの正式版リリースは今年秋以降の見込みとなっている。 ・ その他 Apollo に関する参考URL 「Adobe Apolloメモ」 http://www.saturn.dti.ne.jp/~npaka/flash/apollo10/index.html GIZMO を開発している会社 ants の方なのに, なぜか Apollo の紹介をされています。 何回まで続くのかわかりませんが…↓ 「第1回 Apolloアプリケーションを触ってみよう|gihyo.jp」 http://gihyo.jp/dev/serial/01/adobe-apollo/0001 とまあ,そんなこんなで,SWF の方がまだ有利です。 プロジェクタファイルは 「プレーヤー付アニメーションファイル」とか 「簡単なゲームソフト」とかのように, 「見るだけ」「遊ぶだけ」ファイルのようなものにしかなりません。 RSSリーダーのようなものくらいは使えるかもしれませんが, RSSリーダーをプロジェクタファイルで作るのでしたら, まだ SWF と GIZMO と組み合わせてガジェット(気の利いた目新しい小物)にした方が格好良く機能も充実します。 それに RSSリーダー もやはりネット上の情報を有効にとってくるものであって, ローカルPCに何かをするものではありませんね。 ==================== 本題です。 と言っても,Flash を普通に使う方法ですから, すでに考えていらっしゃるとは思いますが。 その 「setup.exe」 や,それにまつわる実行ファイルからは, レジストリを変更するのではなく, exeの終了時に単なるテキストファイルを任意の普通のフォルダに用意することはできないのでしょうか? Flash のプロジェクタはローカルに手足も出せないと言っても, テキストファイルを読むことぐらいはします。 例えば ドライブC の Flash フォルダがあったとして, そこに -------------------------- close_flg=1 -------------------------- という内容が書かれただけのファイルを用意します。 ファイル名は,「close.txt」 とでもしておきます。 つまり, 「close_flg=1」という内容の 「C:\Flash\close.txt」を作成するということですね。 Flash を起動させて, ステージ上に「result_txt」というインスタンス名(変数名ではありません)の 少し大きめ(20字が入るくらい)のダイナミックテキストフィールド(文字色は黒)を作成します。 そして, フレームのスクリプトとして次のようなものを書きます。 ---------------------------------------- // LoadVarsクラスのインスタンス myLV を作成 var myLV:LoadVars = new LoadVars(); // ------ // myLV にデータがロードされたときの動作定義 myLV.onLoad = function(Seikou:Boolean) { // ロード成功時 if (Seikou) { // ロードした変数 close_flg の値が 1 であれば if (this.close_flg == 1) { // result_txt に 「setup.exe 起動中」を表示 _root.result_txt.text = "setup.exe 起動中"; } else { // この プロジェクタ を終了 fscommand("quit", ""); } } else { // ロードすべきファイルが無い場合 // result_txt に 「ロード失敗」を表示 _root.result_txt.text = "ロード失敗"; } }; // ------ // 1フレーム進む時間ごとに毎回実行 this.onEnterFrame = function() { // 例:C:\Flash\close.txt を myLV にロード myLV.load("file:///C|/Flash/close.txt"); }; ---------------------------------------- そして,プロジェクタファイルをパブリッシュします。 すると, 「setup.exe」 が "存在する場合" と "存在しない場合" で, 表示される内容が変わり, また, 「setup.exe」 が存在する場合, そのテキストデータが 「close_flg=1」 のときと 「close_flg=0」 のときでも動向が変わります。 上のサンプルスクリプトの場合, プロジェクタファイルを起動中に, メモ帳などテキストエディタで, 「C:\Flash\close.txt」のデータ「close_flg=1」を 「close_flg=0」に変更して上書き保存してやると, プロジェクタが自動終了します。 また, セットアップ起動中なら close_flg=1 ファイルコピー中なら close_flg=2 レジストリ書き込み中なら close_flg=3 スタートメニューに登録中なら  close_flg=4    …                … のような感じで決めておくと, それぞれの値によって何か違う画面を表示することもできますね。  // 例:C:\Flash\close.txt を myLV にロード  myLV.load("file:///C|/Flash/close.txt"); ここは当然,相対パスでもかまいません。 この程度まででしたら, プロジェクタファイルでも可能です。 これ以上はどうか...。

toy_f
質問者

お礼

返事遅くなってしまってスイマセン。 回答ありがとうございます。 結論からなんですが、 (上記に記載されていませんでしたが)このFlashはもうひとつEXEファイルを起動させるボタンを用意していました。 質問のチェックはそのもうひとつのEXEファイル実行に必要な要素を取り出すために待ち状態を作りたかったんです。 今回はそちら側(もうひとつのEXEファイル)に起動させるための条件を加える形で作成しました。 Flash+HTA の方法は考えたのですが、 『実行元をEXEファイルから行いたかった』、 ということがありまして(では、何故Flashか、は???なのですが)、 すぐに却下されてしまった状況でした。 sassakun様が書いてくださったのは外部ファイル読み込みということですか? 確かにその方法であれば、ファイル内容によっては終了だけでなく、引数としての使用も考えられそうですね。 今度は使用していきたいと思います。 ありがとうございました。

関連するQ&A

専門家に質問してみよう