找回密码
 加入
搜索
楼主: xkowen

弱弱地问一句:这是不是AutoIT的Bug啊(程序假死)?

[复制链接]
 楼主| 发表于 2008-11-18 16:43:33 | 显示全部楼层

回复 14# netegg 的帖子

把鼠标放在程序上会显示等待提示,像上面的附件一样的
大虾,先告诉我为什么不能选中文件吧?
发表于 2008-11-18 17:00:19 | 显示全部楼层
选中文件?你不是要做一个选择的对话框吗,直接读呀
发表于 2008-11-18 17:00:58 | 显示全部楼层
然后传递过去
发表于 2008-11-18 17:03:57 | 显示全部楼层
对了,我可不是大虾,我接触这个也没多长时间,从批处理转的

评分

参与人数 1金钱 +1 收起 理由
xkowen + 1 感谢关注!!!

查看全部评分

 楼主| 发表于 2008-11-18 17:32:26 | 显示全部楼层

回复 19# netegg 的帖子

呃...我也是初学!
大虾你怎么没明白我的意思啊!我是说点击网页上的“浏览”按钮后选中指定的文件!但是我那个代码选不上指定的文件就挂了,你看看代码先吧!
我那个代码的流程大概是:访问$IE、$IE2--->获取$IE2上的版本--->点击$IE的“浏览”按钮--->根据版本选择不同文件(就在这里出问题,假死,而且不能选中文件)--->然后提交重启--->OK了!
发表于 2008-11-18 18:08:50 | 显示全部楼层
要开多进程,不大好玩了
发表于 2008-11-19 14:21:56 | 显示全部楼层
如果用GUI内嵌的浏览器,在选择文件框弹出那一下就已经死在那了,只能在选择文件框弹出前用COPROC多开一个进程作为输入用,或者不要用GUI的浏览框,还用IE的浏览器,更智能的办法我就不知道了...
 楼主| 发表于 2008-11-19 16:11:38 | 显示全部楼层

回复 22# liongodmien 的帖子

用COPROC多开一个进程作为输入用?
大虾,可不可给个例子?谢谢!
发表于 2008-11-20 15:09:10 | 显示全部楼层
主代码部分:

$String = FileReadLine($INI, $i)
        If Not FileExists($String) Then
                FormatTheFile($String)
                ContinueLoop
        EndIf
        If @error = 1 Or @error = -1 Then
                ContinueLoop
        EndIf
        
        $Name = StringRegExp($String, '([^\\]+)\..*$', 1, 1)
        $oINPUT = _IEGetObjByName($oIE, 'userfile')
        ClipPut($String)
        _CoProc('InputTheString')
        _IEAction($oINPUT, 'click')
        $oFORM = _IEFormGetObjByName($oIE, 'upload')
        $oINPUT = _IEFormElementGetObjByName($oFORM, 'title')
        _IEFormElementSetValue($oINPUT, $Name[0], 1)
        $oINPUT = _IEFormElementGetObjByName($oFORM, 'memo')
        _IEFormElementSetValue($oINPUT, $Name[0], 1)

COPROC部分:

Func InputTheString()
        $String = ClipGet()
        BlockInput(1)
        Do
                Sleep(10)
                If WinExists('选择文件', '') Then
                        ControlSetText('选择文件', '查找范围', '[CLASSNN:Edit1;ID:1148]', $String)
                        ControlClick('选择文件', '查找范围', '[CLASSNN:Button2;ID:1]')        
                EndIf
                If Not WinExists('选择文件', '') Then ExitLoop
        Until 0
        BlockInput(0)
EndFunc
 楼主| 发表于 2008-11-21 16:25:38 | 显示全部楼层

回复 24# liongodmien 的帖子

虽然没怎么看懂,但还是要谢谢!(慢慢参悟,嘿嘿!)
貌似楼上的代码需要Coproc库文件才能执行,收了很多资料,才发现这里有下的: http://www.autoitscript.com/foru ... 29326&hl=CoProc遗憾的是偶不会用这个函数,郁闷ing...
还有没有人知道更好的方法啊?拿出来分享一下下!

[ 本帖最后由 xkowen 于 2008-11-22 14:50 编辑 ]
 楼主| 发表于 2008-11-22 16:03:47 | 显示全部楼层

回复 24# liongodmien 的帖子

大虾,看完你的东西后自己参悟了一下,但是还是不行啊!刚执行到_coproc("upgrade")的地方程序就完全退出了!感觉明显有错,又不知道错在什么地方,麻烦大虾帮忙看看,谢谢!
代码如下:(这段代码中test()是循环的!)
\
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_icon=D:\Program Files\AutoIT3\Aut2Exe\Icons\kde.ico
#AutoIt3Wrapper_outfile=E:\Soft\Myexe\DVS_Reboot_V0.1\DVS_Upgrade.exe
#AutoIt3Wrapper_Res_Comment=目前不支持重启!
#AutoIt3Wrapper_Res_Description=DVS Auto Upgrade
#AutoIt3Wrapper_Res_Fileversion=0.1.0.0
#AutoIt3Wrapper_Res_LegalCopyright=OWEN
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
#include <IE.au3>
#Include <date.au3>
#include <GUIConstants.au3>
#include <coproc.au3>
$IPaddr=IniRead("video.ini","video","IPaddr","192.168.200.110")
$User=IniRead("video.ini","video","User","admin")
$PWD=IniRead("video.ini","video","Password","admin")
$Loop=iniread("video.ini","video","Loop","1000")
$Sleep=iniread("video.ini","video","Sleep","60")
$Type=iniread("video.ini","video","Type","GrandStream")
$PageID_1=IniRead("video.ini","video","PageID","Pages/maintenance.asp")
$Delay=IniRead("video.ini","video","Delay","30")
$IP=$IPaddr&"/"&$PageID_1
$Title="连接到 " & $IPaddr
Dim $i0=0
$Downgrade=IniRead("video.ini","video","Downgrade","")
$Upgrade=IniRead("video.ini","video","Upgrade","")
$Upgrade_version=IniRead("video.ini","upload","Upgrade_version","")
$Downgrade_version=IniRead("video.ini","upload","Downgrade_version","")
;====>version
Opt("GUIOnEventMode", 1)
$window=GUICreate("DVS TEST",250, 120, 407, 452)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
$Group1 = GUICtrlCreateGroup("请稍等(20s)...", 8, 8, 233, 103)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Label1 = GUICtrlCreateLabel("IP:", 16, 32, 17, 17)
$Label2 = GUICtrlCreateLabel("统计:", 16, 50, 31, 17)
$Label3 = GUICtrlCreateLabel("开始:", 16, 68, 31, 17)
$Label4 = GUICtrlCreateLabel("结束:", 16, 86, 31, 17)
$Label5 = GUICtrlCreateLabel($IPaddr, 48, 32, 190, 17)
$Label6 = GUICtrlCreateLabel("0 (successful!)", 48, 50, 190, 17)
$Label7 = GUICtrlCreateLabel("00年/00月/00日 00时/00分/00秒", 48, 68, 190, 17)
$Label8 = GUICtrlCreateLabel("00年/00月/00日 00时/00分/00秒", 48, 86, 190, 17)
$Label9 = GUICtrlCreateLabel("Grandstream Networks,Inc.2008", 38, 103, 185, 12)
GUICtrlSetColor(-1, 0x808080)
GUICtrlCreateGroup("", -99, -99, 1, 1)
autoitsetoption("TrayAutoPause",0)
GUISetState(@SW_SHOW)
GUICtrlSetData($Label5,$IPaddr&"  Up/Downgrade")
Sleep(15000)
$PID=_coproc("upgrade")
$ping=ping($IPaddr,5)
If $ping Then
        $start_time=_NowCalc()
        GUICtrlSetData($Label7,$start_time)
Else
        GUICtrlSetData($Group1,"Disconnected...")
        MsgBox(0,"Error msg!","无法连接到目标IP,请确认网络连接良好!")
        Exit
EndIf
While 1
  test()
WEnd
Func test()
        $IE=_IECreate($IP,0,0,0,0)
        WinWait($Title,$Type,30)
        $msg1=WinExists($Title,$Type)
        If $msg1=0 Then
                sleep(100)
        Else
                controlsend($Title,$Type,"Edit2","admin",0)
                controlsend($Title,$Type,"Edit3","admin",0)
                ControlClick($Title,$Type,"Button1")
                ControlClick($Title,$Type,"Button2")
                sleep(1500)
;===>有界面,登录并记住密码!
        EndIf
        $button=_IEGetObjByName($IE,"Upgrade")
        $IE2=_iecreate($IPaddr&"/Pages/about.asp",0,0,1,0)
        $get_txt=_IEBodyReadText($IE2)
        $check_upgrade=StringRegExp($get_txt,$Upgrade_version,0)
        $check_downgrade=StringRegExp($get_txt,$Downgrade_version,0)
        _IEQuit($IE2)
        _ProcResume($PID);===>恢复子进程
        $button2=_IEGetObjByName($IE,"fimage")
        _IEAction($button2,"click")
        Sleep(2000)
        _ProcSuspend($PID);===>暂停子进程
        _IEAction($button,"click")
        Sleep($Sleep*1000)
EndFunc

Func Upgrade()
        $msg=WinExists("选择文件","文件名")
        If $msg=1 Then
                WinSetTrans("选择文件","文件名",0)
                If $check_upgrade=1 Then
                        ControlSetText("选择文件","文件名","Edit1",$Downgrade)
                ElseIf $check_downgrade=1 Then
                        ControlSetText("选择文件","文件名","Edit1",$Upgrade)
                EndIf
                Sleep(1000)
                ControlClick("选择文件","文件名","Button2","left")
        EndIf
EndFunc

Func CLOSEClicked()
        $box = MsgBox(1, "关闭?", "你确定要退出DVS TEST程序?")
        If $box = 1 Then
                Exit
        EndIf
EndFunc


[ 本帖最后由 xkowen 于 2008-11-24 22:06 编辑 ]
发表于 2008-11-22 17:35:15 | 显示全部楼层
子进程的挂起和恢复我不知道可不可以正常用,但我试过的控制子进程退出好像不行,所以我就选择了输入完后子进程自动退出.

你在判断一个窗口有无的时候可以直接用:

If WinExists('窗口标题', '窗口文本') Then ;判断有窗口
If Not WinExists('窗口标题', '窗口文本') Then ;判断无窗口

子进程用于输入的代码不用设置弹出框透明,因为那一下输入停留的时间是很短的(0.2-0.4秒)

如果是明显错误退出的,在编辑器那会有错误提示的,看一下那的提示会比较好找原因.子进程运行不起会有这种情况,但会连主进程也退出的那要看清错误提示了,你如果找到了提示,最好发一下.没有的就截图,不然没你那的运行情况测试,是试不出什么的!

这种FLASH的输入,你可以试一下抓一下网络封包,看一下有有没可以利用的方法(就是看输入文件名之后是否有向服务器发送信息和返回信息)
 楼主| 发表于 2008-11-23 10:06:06 | 显示全部楼层

回复 27# liongodmien 的帖子

大虾,整个程序是在$PID=_coproc("upgrade")处退出的,还没有到判断窗口的地方,但是偶觉得没什么错误啊!大虾再仔细看看,谢谢了!
如果抓包的话,Tcp报文是封装的,貌似看不到吧!
运行时的提示信息如下,没有报什么明显错误啊!真是郁闷了!
>"D:\Program Files\autoit3\SciTe\ACNWrapper\ACNWrapper.exe" /run /ErrorStdOut /in "E:\Soft\Myexe\DVS_Reboot_V0.1\复件 DVS_Upgrade_0.1.au3" /autoit3dir "D:\Program Files\AutoIT3" /UserParams   
+>10:00:01 Starting AutoIt3Wrapper v.1.0.0.10    Environment(Language:0804  Keyboard:00000804  OS:WIN_XP/Service Pack 2  CPU:X86  ANSI)
>运行 AU3Check (1.54.13.0)  开始目录:D:\Program Files\AutoIT3
!>10:00:01 AU3Check 结束[CODE]:2
>运行:(3.2.11.10):D:\Program Files\AutoIT3\AutoIt3.exe "E:\Soft\Myexe\DVS_Reboot_V0.1\DVS_Upgrade_0.1.au3"   
->10:00:17 AutoIT3.exe 完成:[CODE]:1
+>10:00:18 AutoIt3Wrapper Finished
>退出代码: 1    时间: 18.145
发表于 2008-11-24 11:41:00 | 显示全部楼层
要明白子进程不能简单的和主进程混在一齐理解,子进程更加可以说是一个独立进程,不要把在主进程用的(定义了的)变量,想当然的可以在子进程用,在你的子进程函数中就有几个这样的情况
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-17 19:15 , Processed in 0.083794 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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