ステージに配置したコンポーネントを、ドキュメントクラス内で使う方法 Excel_Reviserが便利だ
4月 25

超ニッチな話題なので、ほとんど誰にも役に立たないと思うけど、自分用の備忘録です。(時々、ボウビロクかビボウロクか訳がわからなくなる・・)

Flashからプロジェクタ形式にパブリッシュすると、hoge.exeという実行形式のファイルが出来るのですが、swfに一皮かぶせただけなので、Windows/Macのアプリとしての機能はかなり貧弱。
しかし、ブラウザを必要としないし、タダのswfよりexeというだけでエラそうな感じではある。
まだはっきりとした保障はないのだが、swfのままだと、Flash Playerのセキュリティの制限をかなり受ける(クロスドメインで通信できないとか)のだが、exeだとすこし緩くなるようだ。(かなり自信ないけど)

実際、swf(つまりFlash Player)ではポリシーファイルが無いためSocket接続できなかったものも、プロジェクタ形式だと、ふつうに通信できた。

ActionScript2.0には、バイナリのSocketが無いため、シリアル通信には不向きということは先日書いた。
だから、AS2.0で作ったアプリとLocalConnectionで接続できるAS3.0のプロクシアプリを作って、AS3.0のプロクシアプリが、シリアルプロクシのserproxy.exeと通信するというヤヤコシイ方法でシリアル通信をしたのだが、この方法だと、メインのアプリ以外に常に2つのプロクシアプリが起動しておく必要がある。

fscommandからコマンドを起動できるのはできるけど、かなり使い勝手が悪い。
そこで、プロクシ2つ→メインアプリと起動するbatファイルを作ったのだが、今度は、既に起動してる状態でbatファイルを起動されると、全てのアプリが2重に起動してしまう。

ちゃんとしたアプリなら、アプリケーションアイコンをダブルクリックしても、プロセスが多重起動することなく、既存のプロセスに移行するのだが、Flashプロジェクタはそこまで賢くない。
(たとえば、@IT:.NET TIPS Windowsアプリケーションの多重起動を禁止するには?

serproxy.exeには手を入れることができないので、AS3.0のLocalConnection⇔Socketプロクシアプリに、

  1. 多重起動チェック用のLocalConnection ID宛に接続を試みる(この時点ではまだconnectしてない)
  2. もし、接続できた場合、多重起動なので、fscommandでquitする
  3. 接続できない場合、シングル起動なので、多重起動チェック要のLocalConnection IDにてconnectし、待機する
  4. という方法で、このプロクシアプリの多重起動についてはなんとか対処できた。

    ・・・しかし、もっとシンプルな方法があった。バッチファイルに

    taskkill /IM app2.exe
    taskkill /IM serproxy.exe
    start /MIN app2.exe
    start /MIN serproxy.exe
    

    というふうに、起動する前に、同じプロセス名のプロセスがあったら強制的にぬっころす!というふうに書けばOK.
    killallみたいな感じだね。

    serproxyは、Flashでシリアル通信する人にとっては超必須なアプリなので、上記のようなバッチファイル作っておけば、毎回、起動したり終了したりをしなくて便利です。

    mProjectorで同様のことができたら、そっちに移行するんだけどなー

Popularity: 10% [?]

written by ANN

add to hatena hatena.comment (1) add to del.icio.us (0) add to livedoor.clip (0) add to Yahoo!Bookmark (1) Total: 2

Leave a Reply