[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でインストーラーを作成しなければならない。
詳細はこちらの続きの記事へ
最近のコメント