[已解决]面对那些无法获取控件,并且安装过程中窗口大小一样的要怎么做自动化呢?
本帖最后由 xing999999 于 2015-12-19 21:58 编辑比如2345拼音输入法
他从安装,到最后结束,都无法正常获取控件,并且全程安装过程中窗口大小一样。
悲催,之前刚学的根据窗口大小来判断在这里完全无效。上次听说可以获取色块,但我看了最开始安装窗口和最后的安装窗口,颜色基本相同。。崩溃。。。怎么搞?Local $srf="2345王牌输入法v3.5安装"
Run("2345pinyin.exe")
$tip = "为了保证自动安装的顺利完成,请不要乱动的键盘和鼠标。"
$tip &= @CRLF
$tip &= "2345输入法默认安装在C盘。如果需要安装在其他盘,请在安装结束后,卸载,再手动安装。"
ToolTip($tip, @DesktopWidth / 2.5 - 15, @DesktopHeight - 40 - 60, "温馨提示:", 2)
WinWait($srf)
WinActive($srf)
Send ("{ENTER}")到了SEND回车键后,就会弹出结束的窗口来,和之前安装的窗口是一样的。。。截图如下:
所获取的参数如下:
开始窗口:
结束窗口: LZ没看到窗口句柄或进程pid都改变了吗?这还不简单?无语… 但是这个句柄或PID每次安装都不同啊 老师我真搞不懂句柄和PID,你能否给我一个例子说明下?不用这个例子也行。 本帖最后由 afan 于 2015-12-18 17:29 编辑
为什么就不能看看帮助文档呢?这里涉及的内容仅有几个函数而已。比如 WinWait() 返回的就是句柄。
不说了Local $srf = "2345王牌输入法v3.5安装"
Run("2345pinyin.exe")
Local $hWnd0 = WinWait($srf)
WinActivate($srf) ;这里不是用WinActive 看清楚
Send("{ENTER}")
Do
Sleep(500)
Until WinGetHandle($srf) <> $hWnd0
Msgbox(0, '', '已出现安装完成窗口?') 本帖最后由 xing999999 于 2015-12-18 17:57 编辑
谢谢了,我仔细阅读和想下,主要是对句柄根本就没概念。。刚查阅了官方的说明,还在看ING。。
同时想顺便问下,为什么要用winactivate,用winactive不行吗?后者是检查窗口是否存在然后激活他,前者只是激活他。 一个是激活它
一个是检查是否处于激活,哪里有“然后激活它”?
… 本帖最后由 xing999999 于 2015-12-18 19:41 编辑
Local $srf = "2345王牌输入法v3.5安装"
Run("2345pinyin.exe")
Local $hWnd0 = WinWait($srf)
WinActivate($srf) ;这里不是用WinActive 看清楚
Send("{ENTER}")
Do
Sleep(500)
Until WinGetHandle($srf) <> $hWnd0
Msgbox(0, '', '已出现安装完成窗口?')老师我还想问下,您一开始设的变量是窗口标题,如果我设这个变量为窗口文本行不行呢?或者控件文本行不行呢?甚至于控件ID行不行呢?
这个我已经看明白了,主要是winwait的返回值是句柄,这是2个窗口,如果是3个窗口或更多窗口要怎么表示呢 如果我设这个变量为窗口文本行不行呢?
窗口文本是WinWait()的第二个参数,第一个参数只能是标题或句柄。
或者控件文本行不行呢?
窗口文本首先就是控件文本,没有控件,窗口文本怎么设置?所以,控件文本就是WinWait()的第二个参数。
甚至于控件ID行不行呢?
你弄控件ID对窗口类操作有何用,那个只对 Control* 之类控件操作有用
如果是3个窗口或更多窗口要怎么表示呢
具体问题具体分析,不过提这种问题毫无意义。
这些都是最基本的窗口类的简单操作。强烈怀疑你有没有看帮助文档? 本帖最后由 xing999999 于 2015-12-18 20:36 编辑
回复 9# afan
真有看过。。。只不过以前一直不知道WINWAIT可以返回句柄,以前只知道winwait就是暂停脚本,等待窗口出现,从不知道还可以返回信息,也不知道返回是什么意思。只知道按正常的思维,从上到下设计命令来依次执行。思维方式还是在批处理的处理方式上。。
再者还想问下,那些静默安装的方式,AU3能做到吗?所谓的静默安装,是否就是复制或解压相关的文件去相关的目录,在注册表里添加相关的信息,在桌面或开始菜单添加相关的快捷方式等等。是否是这样?如果不是这样,那么静默安装他们又是怎么做到的呢? 有些软件本身就带有静默安装参数。直接 Run('exe 静默参数')
如果没有自带的静默参数,监视其安装,获取安装路径文件、注册表信息,即可尝试自行制作你上面所说的释放路径、写注册。 回复 11# afan
Local $srf="2345王牌输入法v3.5安装"
Run("2345pinyin.exe")
$tip = "为了保证自动安装的顺利完成,请不要乱动的键盘和鼠标。"
$tip &= @CRLF
$tip &= "2345输入法默认安装在C盘。如果需要安装在其他盘,请在安装结束后,卸载,再手动安装。"
ToolTip($tip, @DesktopWidth / 2.5 - 15, @DesktopHeight - 40 - 60, "温馨提示:", 2)
$jb=WinWait($srf)
WinActivate($srf)
Send ("{ENTER}")
Do
Sleep(500)
Until WinGetHandle($srf) <> $jb
Send ("{ENTER}")
还是停在最后结束的窗口,没有退出。实质上在第一个send回车之后就会停在这个结束的窗口。用句柄返回值对比,只到句柄变化再发送回车,应该是会自动退出窗口的。。。。但无论怎么实验,都是停在结束的窗口 回复 12# xing999999
自己观察 回复 13# afan
{:face (229):}来回测试了好久也是这样,这是为什么。。。我也不知道要怎么观察,提供下方向。。。 回复 13# afan
老师, 我测来测去,感觉是不是这样呢?打开安装的时候一个界面,点安装在安装的过程中(确实切换了画面,虽然窗体大小是一样的,同时有进度条)又一个界面,安装完成第3个界面。而按我这个代码,实质在安装的过程中就已经运行结束了。所以停在第3个界面。。那么要怎么写呢,请老师指导