1

有没有办法在 adobe air 中与 cmd(使用本机进程)进行通信。举个例子; 如何将“ping www.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

您应该阅读Interacting with Native Processes in AIR。您在命令提示符(ping在您的情况下)中写入的是另一个 exe 文件,位于 Windows 路径中指定的文件夹中。因此,您实际上必须使用AIR 中ping.exe的类调用 。NativeProcess或者,您可以研究 exe 的工作原理,然后在您的 AIR 应用程序中实现该逻辑。

编辑

编辑问题后,以下是更多详细信息:

您使用正则表达式(点击该链接并了解正则表达式)

既然你想匹配这个模式

最小值 = (number)ms, 最大值 = (number)ms, 平均值 = (number)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

要执行 shell 命令(例如 ping),您需要从它的位置运行 cmd.exe 或运行 ping.exe。我发现没有直接的方法可以在 AIR 中执行 shell 命令,并且也禁止执行 bat 文件。因此,要调用 cmd.exe,您需要知道它在哪里。它的位置由环境变量给出%ComSpec%(我假设我们正在谈论 Windows),但您也无法从 AIR 应用程序中获取此值。
因此,当我解决了这样的问题时,我只是将 cmd.exe 与我的本机 AIR 应用程序捆绑在一起。不是最好的解决方案,因为 cmd.exe 是在另一个操作系统上使用的。您可以通过以下方式解决您的问题:

  • 创建执行 'echo %ComSpec%' 并退出的本机帮助程序 exe。您可以使用system()命令来执行此操作,请参阅 WinApi 文档。
  • 在 AIR 应用程序中,运行此帮助程序并读取控制台输出。
  • 使用此路径调用 cmd.exe(您可以为单个命令指定 /C 参数。)

或者,如果您愿意,可以创建从 AIR 应用程序获取参数并使用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 回答