プロが教える店舗&オフィスのセキュリティ対策術

初めて質問させていただきます。

Flash MX 2004を使用しています。
プロジェクタからアプリケーションを起動させる処理を作ったのですが、
この実行ファイルの終了をFlash側で拾うことはできるのでしょうか?
実行ファイルの起動部分は、下のように記述しています。

または、この実行ファイルがレジストリ更新をしているのですが、レジストリの書き込みでも判断できるか、と思っています。
レジストリの読み込み方法でも構いませんので教えていただければ。

どうか宜しくお願いします。


on (release) {
fscommand("exec", "setup.exe");
}

A 回答 (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 …



また,レジストリの監視や,
他アプリケーションの監視までは無理だと思いますが,
最近???(ちょっと前から)では,
次のようなものもあると言えばあります。
これまた私は素人ですが↓。

「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/apollo1 …

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");

ここは当然,相対パスでもかまいません。


この程度まででしたら,
プロジェクタファイルでも可能です。
これ以上はどうか...。
    • good
    • 0
この回答へのお礼

返事遅くなってしまってスイマセン。
回答ありがとうございます。

結論からなんですが、
(上記に記載されていませんでしたが)このFlashはもうひとつEXEファイルを起動させるボタンを用意していました。
質問のチェックはそのもうひとつのEXEファイル実行に必要な要素を取り出すために待ち状態を作りたかったんです。
今回はそちら側(もうひとつのEXEファイル)に起動させるための条件を加える形で作成しました。

Flash+HTA の方法は考えたのですが、
『実行元をEXEファイルから行いたかった』、
ということがありまして(では、何故Flashか、は???なのですが)、
すぐに却下されてしまった状況でした。

sassakun様が書いてくださったのは外部ファイル読み込みということですか?
確かにその方法であれば、ファイル内容によっては終了だけでなく、引数としての使用も考えられそうですね。
今度は使用していきたいと思います。
ありがとうございました。

お礼日時:2007/04/09 10:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!