可否让cmd窗口信息同步传送到某个控件并实时显示?
调用cmd执行某句命令,然后cmd窗口会滚动显示执行信息,不知道是否可以让回显的信息实时地传送到某一个控件上,并同步显示出来?我用下面的代码捣鼓了半天也弄不出来。#include <Constants.au3>
Local $foo = Run(@ComSpec & " /c impdp system/123456@ORCL DIRECTORY=DUMP_EXP DUMPFILE=NC.DMP REMAP_SCHEMA=NC:NC65", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
Local $line
While 1
$line = StdoutRead($foo)
If @error Then ExitLoop
Wend
While 1
$line = StderrRead($foo)
If @error Then ExitLoop
Wend
谢谢! 我也需要这方面的功能,不知道你实现了没有?如果实现了,麻烦告诉我一下,谢谢。 http://www.autoitx.com/thread-175-1-1.html 本帖最后由 smooth 于 2014-3-25 22:46 编辑
haijie1223 发表于 2014-3-25 21:22 http://www.autoitx.com/images/common/back.gif
谢谢,可能你没理解我提的问题。我的问题是,调用CMD执行命令之后,CMD窗口的信息是滚动的,时间可能有10分钟。我想实现的效果是:每当CMD窗口出现一行,即时把这行传送的一个控件如编辑控件上显示出来,效果就像CMD窗口的滚屏,并且与CMD是同步的。普通的截取回显没有问题。 回复 4# smooth #include <Constants.au3>
GUICreate("", 300, 400)
$edit = GUICtrlCreateEdit("", 10, 10, 280, 380)
GUISetState()
$foo = Run(@ComSpec & " /cping 192.168.1.1 /t", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
$lines = ""
While 1
$line = StdoutRead($foo)
If @error Then ExitLoop
$lines &= $line
GUICtrlSetData($edit, $lines)
Sleep(1000)
WEnd这个问题,我认为用截获回显的方法并不是很科学。 本帖最后由 smooth 于 2014-3-26 10:00 编辑
回复 5# haijie1223
嗯,我也知道。可是我想不出来有什么办法可以让程序执行的时候让用户看到过程。我执行RUNWAIT()的时候,除了CMD窗口有滚动的信息显示之外,还同步生成一个LOG日志文件,我也试过读取逐行filereadline(或者整个文件一个读fileread)的方法,并传送到控件Edit,但是没有成功。
回复 6# smooth
那样就更不科学~我觉得你可以借鉴这样的方法:http://www.autoitx.com/thread-43881-1-1.html http://www.autoitx.com/forum.php?mod=redirect&goto=findpost&ptid=43134&pid=560901&fromuid=7633057
http://www.autoitx.com/forum.php?mod=redirect&goto=findpost&ptid=37762&pid=516262&fromuid=7633057
看看对你有没有参考 用匿名管道是最佳方法 不错的想法,学习了。
页:
[1]