wingking84 发表于 2012-6-12 15:09:12

PING命令显示执行过程和获取结果[已解决]

本帖最后由 wingking84 于 2012-6-25 17:40 编辑

需求:ping 1.1.1.1,
要能看到PING的过程
要根据输出中有没有0%判断PASS,FAIL

用Run(@ComSpec & " /c " & $cmd, "", @SW_MAXIMIZE)能看到过程,获取不到输出(stdout)
用$a = Run($cmd, "", @SW_MAXIMIZE, $STDERR_CHILD + $STDOUT_CHILD)只能打开一个黑窗口,看不到命令和结果,但StdoutRead可以获取到结果。

求解。

netegg 发表于 2012-6-12 16:00:05

论坛搜,有现成的例子

wingking84 发表于 2012-6-12 16:20:28

搜“CMD”显示三页,没看到合适的。
有个在控件里显示CMD的,似乎复杂,刚才跳过了,再看下吧。

afan 发表于 2012-6-12 18:37:44

本帖最后由 afan 于 2012-6-12 19:52 编辑

Opt('GUIOnEventMode', 1)

GUICreate('Ping…')
GUISetOnEvent(-3, '_Exit')
Local $iInput = GUICtrlCreateInput('ping 1.1.1.1', 2, 5, 396, 20)
Local $iEdit = GUICtrlCreateEdit('请输入命令后回车', 2, 26, 396, 350, 0x200000)
Local $iLb = GUICtrlCreateLabel('等待执行… ', 10, 380, 300, 12)
GUISetState()
GUIRegisterMsg(0x0111, '_WMCOMMAND')

While 1
        Sleep(100)
WEnd

Func _WMCOMMAND($hWnd, $iMsg, $wParam)
        #forceref $hWnd, $iMsg
        If BitAND($wParam, 0x0000FFFF) = 1 And Not BitShift($wParam, 16) Then Return _Run_CMD()
EndFunc   ;==>_WMCOMMAND

Func _Run_CMD()
        GUICtrlSetData($iEdit, '')
        GUICtrlSetData($iLb, '正在执行命令并回显…')
        Local $iPid, $Error, $sLine, $ts = TimerInit()
        $iPid = Run(@ComSpec & ' /c ' & GUICtrlRead($iInput), '', 0, 3)
        While 1
                $sLine = StdoutRead($iPid)
                $Error = @error
                GUICtrlSetData($iEdit, $sLine, 1)
                If $Error Or Not ProcessExists($iPid) Then ExitLoop
                Sleep(1)
        WEnd
        GUICtrlSetData($iLb, '命令完成,回显结束。耗时 ' & Round(TimerDiff($ts)) & ' 毫秒')
EndFunc   ;==>_Run_CMD

Func _Exit()
        Exit
EndFunc   ;==>_Exit

user3000 发表于 2012-6-12 19:18:24

回复 4# afan

      #forceref $hWnd, $iMsg   
      If BitAND($wParam, 0x0000FFFF) And Not BitShift($wParam, 16)   
第一行多了个小 i .
第二行? 求解释一下两下呗? 老板?

ooxxgod 发表于 2012-6-12 19:32:29

模拟DOS窗口?

afan 发表于 2012-6-12 19:50:44

回复afan

      #forceref $hWnd, $iMsg   
      If BitAND($wParam, 0x0000FFFF) And Not Bi ...
user3000 发表于 2012-6-12 19:18 http://www.autoitx.com/images/common/back.gif


    刚觅食回~

具体含义不清楚,只是一直这么用…… 以下仅做参考:
BitAND($iwParam, 0xFFFF) ;(low id) 低id - 在Input控件回车时其值为1
BitShift($wParam, 16) ;通知 - 在回车时其值为0

zerobin 发表于 2012-6-12 22:23:30

学习了。版大的分享。

pighead456 发表于 2012-6-13 00:26:01

这样模拟 不如 直接 发包 収包 回显简单

wingking84 发表于 2012-6-13 22:01:21

难道用自带的DOS就实现不了了?

afan 发表于 2012-6-13 22:29:36

难道用自带的DOS就实现不了了?
wingking84 发表于 2012-6-13 22:01 http://www.autoitx.com/images/common/back.gif


    可以,复制。

wingking84 发表于 2012-6-14 09:16:43

除了STDOUT,还有什么方法获取PING的输出内容?

user3000 发表于 2012-6-14 09:20:50

回复 12# wingking84


    直接CMD 'ping 127.1 > c:\ping.txt'
    然后读取该文件的内容!

My2009 发表于 2012-6-14 10:41:54

学习了,不错{:face (427):}

lsszmj 发表于 2012-8-8 19:20:29

学习了,谢谢分享
页: [1]
查看完整版本: PING命令显示执行过程和获取结果[已解决]