2012-06-25 75 views
1

有沒有一種方法可以在Adobe空氣中與cmd進行溝通(使用本機進程)。 作爲一個例子; 如何發送「ping www.google.com」到cmd並捕獲Air中的返回值。Adob​​e Air與CMD溝通

編輯

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應用程序打印上面。我需要知道是否有特定的方法來獲取Minimum =?,Maximum =?的值和平均=? 計劃爆炸字符串。有沒有另一種方法。請幫我

在此先感謝。

+0

我已編輯我的答案,你可以檢查出 –

回答

2

您應該閱讀Interacting with Native Processes in AIR。你在命令提示符(你的案例中的ping)中寫的是另一個exe文件,它位於Windows路徑中指定的文件夾中。因此,您實際上必須在AIR中調用ping.exeNativeProcess類。或者,您可以研究該exe如何工作,然後在您的AIR應用程序中實現該邏輯。

編輯

編輯完問題後,這裏有更多的細節:

您使用Regular Expressions(這個鏈接,瞭解正則表達式)

既然你要匹配這個模式

最小=(數)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"); 
} 
+0

感謝您的意見。 :) –

+0

謝謝Pranav:D –

1

要執行shell命令(如ping),您需要從其位置運行cmd.exe或運行ping.exe。我沒有發現在AIR中執行shell命令的直接方式,也禁止執行bat文件。所以,要調用cmd.exe,你需要知道它在哪裏。這是由環境變量%ComSpec%給出的位置(我假設我們正在討論Windows),但您無法從AIR應用程序獲取此值。
因此,當我解決了這樣的問題時,我只是將cmd.exe與我的本機AIR應用捆綁在一起。不是最好的解決方案,因爲cmd.exe是在另一個操作系統上執行的。你可以這樣解決你的問題:

  • 創建本機helper exe執行'echo%ComSpec%'並退出。您可以使用system()命令來執行此操作,請參閱WinApi文檔。
  • 在AIR應用程序中,運行此幫助程序並閱讀控制檯輸出。使用此路徑
  • 調用CMD.EXE(可以指定/單命令Ç參數。)

或者,如果你願意的話,創建本地EXE從AIR應用程序獲得的參數並執行它們與外殼system()。 AIR應用程序然後可以從此exe讀取控制檯輸出。更少的工作爲ActionScript,更多用於C++(或任何您用於本地幫助器的東西。)
更新: 如果你已經有平輸出,只需用正則表達式的解析它,就像
"Reply from \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}: bytes=32 time=(\d{1,})ms TTL=\d{1,}"。將捕獲的時間字符串轉換爲int,然後計算最小/最大/平均值。

+0

非常感謝。我編輯了這個問題。 –