[AdobeAir][AS3]Windowsネイティヴアプリとの連携

AirアプリからWindowsアプリを立ち上げ、なんらかの値を受け取りたい。
受け取った後、受け取ったパラメータにより再起動などの処理を行う。

ネイティブアプリとの連携はNativeProcessで行う。
NativeProcessはAir2.0以上でサポートされている。

Air側の実装

//【Main.as】
package 
{
    import core.nativeWindows;
    /**
     * メイン処理
     */
    public class Main extends Sprite {
        //---------------------------------------------
        // アプリで最初に動く処理
        //---------------------------------------------
        public function Main():void {
            //Windows変更通知クライアント
            var natWin:nativeWindows = new nativeWindows();
            //再起動処理の待機
            //nativeWindowsクラスに定義した無名関数に、Restart関数を定義する。
            //するとnativeWindowsで無名関数onInterruptionを実行すると、Restart関数が発動する。                        
            natWin.onInterruption = Restart;
         }        

        //---------------------------------------
        // 再起動処理
        //---------------------------------------
        public function Restart():void {
            //再起動処理         
        }    
    }                                    
}
//【nativeWindows.as】
package core 
{
    import flash.filesystem.File;
    import flash.desktop.NativeProcess
    import flash.desktop.NativeProcessStartupInfo
    import flash.events.ProgressEvent;

    /**
     * windowsネイティブの更新通知アプリ起動クラス
     */
    public class nativeWindows {
    //---------------------------------------------
    // メイン処理
    //---------------------------------------------
    public var process:NativeProcess;
    public var onInterruption:Function = function():void { };   
        //---------------------------------------------
        // コンストラクタ
        //---------------------------------------------
        public function nativeWindows() {
            initNativeWindows();
        }

        //---------------------------------------------
        // 更新通知プログラム起動、待機
        //---------------------------------------------
        private function initNativeWindows():void {
            //ネイティブプロセスのオブジェクト
            var info:NativeProcessStartupInfo = new NativeProcessStartupInfo(); 
            //exeの指定
            //var file:File = File.applicationDirectory.resolvePath("PlayerAssist.exe"); 
            var file:File = new File("file:///C:/windowsNativeAppli.exe"); 
            //ネイティブプロセスにexeファイルをセット
            info.executable = file; 
            //ネイティブプロセスのオブジェクト
            process = new NativeProcess(); 
            //STANDARD_OUTPUT_DATAに対するイベントリスナー
            process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, dataHandler); 
            //ネイティブプロセス起動
            process.start(info);
        }

        //---------------------------------------------
        // 更新通知の受け取り
        //---------------------------------------------
        private function dataHandler(event:ProgressEvent):void {
            //受け取った標準出力をバイト変換しStringに
            var sdo:String = process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable);
            //CR+LFの記号除去
            sdo = sdo.replace("rn", "");
            //値によりモード判定
            //1=Main切替
            //2=Sub切替
            //3=その他
            if (sdo="1") {
                //再起動        
                onInterruption();
            }
            //windowsプロセス終了        
            process.exit();
            //windowsプロセス再起動        
            initNativeWindows();
        }
    }
}

application.xmlの設定

以下の記述が必須。

  <supportedProfiles>extendedDesktop</supportedProfiles>

また、NativeProcess機能自体Air2.0からになるのでネームスペースは、

<application xmlns="http://ns.adobe.com/air/application/3.1">

など2.0以上の記述が必要になる。

Windowsネイティブインストーラーの作成

windowsネイティブプロセスを実行するには、デフォルトのパッケージツールで作成した.airのインストーラーではエラーになってしまう。

必ずwindows標準実行形式である.exeでインストーラーを作成しなければならない。

詳細はこちらの続きの記事へ

あわせて読みたい

コメントを残す