找回密码
 加入
搜索
查看: 10990|回复: 37

[AU3基础] [已解决]面对那些无法获取控件,并且安装过程中窗口大小一样的要怎么做自动化呢?

 火.. [复制链接]
发表于 2015-12-18 11:34:37 | 显示全部楼层 |阅读模式
本帖最后由 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回车键后,就会弹出结束的窗口来,和之前安装的窗口是一样的。。。截图如下:


所获取的参数如下:
开始窗口:


结束窗口:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2015-12-18 11:58:29 | 显示全部楼层
LZ没看到窗口句柄或进程pid都改变了吗?这还不简单?无语…
 楼主| 发表于 2015-12-18 12:51:21 | 显示全部楼层
但是这个句柄或PID每次安装都不同啊
 楼主| 发表于 2015-12-18 15:02:53 | 显示全部楼层
老师我真搞不懂句柄和PID,你能否给我一个例子说明下?不用这个例子也行。
发表于 2015-12-18 17:26:43 | 显示全部楼层
本帖最后由 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, '', '已出现安装完成窗口?')
 楼主| 发表于 2015-12-18 17:53:52 | 显示全部楼层
本帖最后由 xing999999 于 2015-12-18 17:57 编辑

谢谢了,我仔细阅读和想下,主要是对句柄根本就没概念。。刚查阅了官方的说明,还在看ING。。
同时想顺便问下,为什么要用winactivate,用winactive不行吗?后者是检查窗口是否存在然后激活他,前者只是激活他。
发表于 2015-12-18 18:02:53 | 显示全部楼层
一个是激活它
一个是检查是否处于激活,哪里有“然后激活它”?
 楼主| 发表于 2015-12-18 19:13:34 | 显示全部楼层
本帖最后由 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个窗口或更多窗口要怎么表示呢
发表于 2015-12-18 20:07:51 | 显示全部楼层
如果我设这个变量为窗口文本行不行呢?
窗口文本是WinWait()的第二个参数,第一个参数只能是标题或句柄。

或者控件文本行不行呢?
窗口文本首先就是控件文本,没有控件,窗口文本怎么设置?所以,控件文本就是WinWait()的第二个参数。

甚至于控件ID行不行呢?
你弄控件ID对窗口类操作有何用,那个只对 Control* 之类控件操作有用

如果是3个窗口或更多窗口要怎么表示呢
具体问题具体分析,不过提这种问题毫无意义。

这些都是最基本的窗口类的简单操作。强烈怀疑你有没有看帮助文档?
 楼主| 发表于 2015-12-18 20:29:12 | 显示全部楼层
本帖最后由 xing999999 于 2015-12-18 20:36 编辑

回复 9# afan

真有看过。。。只不过以前一直不知道WINWAIT可以返回句柄,以前只知道winwait就是暂停脚本,等待窗口出现,从不知道还可以返回信息,也不知道返回是什么意思。只知道按正常的思维,从上到下设计命令来依次执行。思维方式还是在批处理的处理方式上。。

再者还想问下,那些静默安装的方式,AU3能做到吗?所谓的静默安装,是否就是复制或解压相关的文件去相关的目录,在注册表里添加相关的信息,在桌面或开始菜单添加相关的快捷方式等等。是否是这样?如果不是这样,那么静默安装他们又是怎么做到的呢?
发表于 2015-12-18 20:51:29 | 显示全部楼层
有些软件本身就带有静默安装参数。直接 Run('exe 静默参数')
如果没有自带的静默参数,监视其安装,获取安装路径文件、注册表信息,即可尝试自行制作你上面所说的释放路径、写注册。
 楼主| 发表于 2015-12-19 09:53:12 | 显示全部楼层
回复 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回车之后就会停在这个结束的窗口。用句柄返回值对比,只到句柄变化再发送回车,应该是会自动退出窗口的。。。。但无论怎么实验,都是停在结束的窗口
发表于 2015-12-19 10:16:02 | 显示全部楼层
回复 12# xing999999


    自己观察
 楼主| 发表于 2015-12-19 10:31:59 | 显示全部楼层
回复 13# afan


    来回测试了好久也是这样,这是为什么。。。我也不知道要怎么观察,提供下方向。。。
 楼主| 发表于 2015-12-19 11:04:24 | 显示全部楼层
回复 13# afan


   老师, 我测来测去,感觉是不是这样呢?打开安装的时候一个界面,点安装在安装的过程中(确实切换了画面,虽然窗体大小是一样的,同时有进度条)又一个界面,安装完成第3个界面。而按我这个代码,实质在安装的过程中就已经运行结束了。所以停在第3个界面。。那么要怎么写呢,请老师指导
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-6 11:17 , Processed in 0.093254 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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