1

Adobe Airで(ネイティブプロセスを使用して)cmdと通信する方法はありますか?例として; 「pingwww.google.com」をcmdに送信し、Airで戻り値をキャプチャする方法。

編集

Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Program Files\Adobe\Adobe Flash Builder 4.5>ping www.google.com

Pinging www.l.google.com [209.85.175.103] with 32 bytes of data:
Reply from 209.85.175.103: bytes=32 time=1733ms TTL=50
Reply from 209.85.175.103: bytes=32 time=189ms TTL=50
Reply from 209.85.175.103: bytes=32 time=188ms TTL=50
Reply from 209.85.175.103: bytes=32 time=186ms TTL=50

Ping statistics for 209.85.175.103:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 186ms, Maximum = 1733ms, Average = 574ms

C:\Program Files\Adobe\Adobe Flash Builder 4.5>   

上記のAirアプリケーションから印刷できます。最小=?、最大=?の値を取得する特定の方法があることを知る必要があります。および平均=?文字列を爆発させる計画。別の方法はありますか?私を助けてください

前もって感謝します。

4

2 に答える 2

2

AIRでのネイティブプロセスとの相互作用について読む必要があります。コマンドプロンプト(このping場合)に書き込むのは、Windowsパスで指定されたフォルダーにある別のexeファイルです。したがって、実際にはAIRping.exeのクラスでを呼び出す必要があります。NativeProcessまたは、exeがどのように機能するかを調べてから、そのロジックをAIRアプリケーションに実装することもできます。

編集

質問を編集した後、詳細は次のとおりです。

正規表現を使用します(そのリンクをたどって正規表現について学びます)

このパターンに合わせたいので

最小=(数値)ms、最大=(数値)ms、平均=(数値)ms

正規表現は次のようになります

var r:RegExp=/Minimum = ([\d\.]+)ms\, Maximum = ([\d\.]+)ms\, Average = ([\d\.]+)ms/i;

//Then, you execute this on your result string
var arr:Array=r.exec(result);

//Then check if the result matched your regex
if(arr != null) {
    var min:int=arr[1];
    var max:int=arr[2];
    var avg:int=arr[3];
} else {
    trace("invalid result from ping");
}
于 2012-06-25T06:41:00.017 に答える
1

シェルコマンド(pingなど)を実行するには、その場所からcmd.exeを実行するか、ping.exeを実行する必要があります。AIRでシェルコマンドを直接実行する方法が見つかりませんでした。また、batファイルの実行も禁止されています。したがって、cmd.exeを呼び出すには、それがどこにあるかを知る必要があります。これは環境変数によって指定された場所です%ComSpec%(Windowsについて話していると思いますが)が、AIRアプリケーションからもこの値を取得することはできません。
そのため、このような問題を解決したときは、cmd.exeをネイティブのAIRアプリにバンドルしました。cmd.exeは別のOSで使用されるため、最善の解決策ではありません。この方法で問題を解決できます。

  • 'echo%ComSpec%'を実行して終了するネイティブヘルパーexeを作成します。コマンドを使用system()してこれを行うことができます。WinApiのドキュメントを参照してください。
  • AIRアプリで、このヘルパーを実行し、コンソール出力を読み取ります。
  • このパスを使用してcmd.exeを呼び出します(単一のコマンドには/ C引数を指定できます)。

または、必要に応じて、AIRアプリから引数を取得し、シェルでそれらを実行するネイティブexeを作成しますsystem()。その後、AIRアプリはこのexeからコンソール出力を読み取ることができます。ActionScriptのジョブは少なく、C ++(またはネイティブヘルパーに使用するもの)のジョブは多くなります。
更新: すでにping出力を取得している場合は、のようにRegExpで解析します
"Reply from \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}: bytes=32 time=(\d{1,})ms TTL=\d{1,}"。キャプチャされた時間文字列をintに変換してから、最小/最大/平均を計算します。

于 2012-06-25T08:04:19.843 に答える