找回密码
 加入
搜索
查看: 4157|回复: 14

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

 火.. [复制链接]
发表于 2012-6-12 15:09:12 | 显示全部楼层 |阅读模式
本帖最后由 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可以获取到结果。

求解。
发表于 2012-6-12 16:00:05 | 显示全部楼层
论坛搜,有现成的例子
 楼主| 发表于 2012-6-12 16:20:28 | 显示全部楼层
搜“CMD”显示三页,没看到合适的。
有个在控件里显示CMD的,似乎复杂,刚才跳过了,再看下吧。
发表于 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
发表于 2012-6-12 19:18:24 | 显示全部楼层
回复 4# afan

        #forceref $hWnd, $iMsg   
        If BitAND($wParam, 0x0000FFFF) And Not BitShift($wParam, 16)   
第一行多了个小 i .
第二行? 求解释一下两下呗? 老板?
发表于 2012-6-12 19:32:29 | 显示全部楼层
模拟DOS窗口?
发表于 2012-6-12 19:50:44 | 显示全部楼层
回复  afan

        #forceref $hWnd, $iMsg   
        If BitAND($wParam, 0x0000FFFF) And Not Bi ...
user3000 发表于 2012-6-12 19:18



    刚觅食回~

具体含义不清楚,只是一直这么用…… 以下仅做参考:
BitAND($iwParam, 0xFFFF) ;(low id) 低id - 在Input控件回车时其值为1
BitShift($wParam, 16) ;通知 - 在回车时其值为0
发表于 2012-6-12 22:23:30 | 显示全部楼层
学习了。版大的分享。
发表于 2012-6-13 00:26:01 | 显示全部楼层
这样模拟 不如 直接 发包 収包 回显简单
 楼主| 发表于 2012-6-13 22:01:21 | 显示全部楼层
难道用自带的DOS就实现不了了?
发表于 2012-6-13 22:29:36 | 显示全部楼层
难道用自带的DOS就实现不了了?
wingking84 发表于 2012-6-13 22:01



    可以,复制。
 楼主| 发表于 2012-6-14 09:16:43 | 显示全部楼层
除了STDOUT,还有什么方法获取PING的输出内容?
发表于 2012-6-14 09:20:50 | 显示全部楼层
回复 12# wingking84


    直接CMD 'ping 127.1 > c:\ping.txt'
    然后读取该文件的内容!
发表于 2012-6-14 10:41:54 | 显示全部楼层
学习了,不错
发表于 2012-8-8 19:20:29 | 显示全部楼层
学习了,谢谢分享
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-30 03:32 , Processed in 0.086554 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表