找回密码
 加入
搜索
查看: 1534|回复: 4

[AU3基础] 控件类名变化,能用正则吗?【已解决】

[复制链接]
发表于 2018-2-27 18:12:54 | 显示全部楼层 |阅读模式
本帖最后由 fybhwsx 于 2018-2-28 17:42 编辑

不是窗口类名,这个控件类名ATL:后面部分会变化,导致控件点击失败。。
ControlClick("[CLASS:NVISetupFrame]", "同意并继续(&A)", "[CLASS:ATL:6D480618; INSTANCE:2]") ;点击同意并继续

本帖子中包含更多资源

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

×
 楼主| 发表于 2018-2-27 22:11:36 | 显示全部楼层
对于无法获取控件ID或者控件变化这种问题,用窗口坐标应该能解决,改成下面这样很顺利的完成这个程序安装。强迫症,总是想通过控件点击它,求助!
;安装NVIDIA显卡驱动
Local $NVIDIA = 'D:\NVIDIA显卡驱动\390.77-notebook-win10-64bit-international-whql\setup.exe'
If FileExists("C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe") = 0 and FileExists($NVIDIA) Then ;若安装文件存在但默认(或指定)路径未发现安装
        ShellExecute(_WinAPI_PathFindFileName($NVIDIA), "", _WinAPI_PathRemoveFileSpec($NVIDIA), "open", @SW_SHOWNORMAL) ;运行安装程序
        WinWait("[CLASS:NVISetupFrame]", "同意并继续(&A)")
        Sleep(250)
        Local $aPos = WinGetPos("[CLASS:NVISetupFrame]")
        Sleep(250)
        MouseClick("", $aPos[0] + 418, $aPos[1] + 413, 1, 1) ;ControlClick("[CLASS:NVISetupFrame]", "同意并继续(&A)", "[CLASS:ATL:6D480618; INSTANCE:2]") ;点击同意并继续
        WinWait("[CLASS:NVISetupFrame]", "精简(&E)(推荐)")
        Sleep(250)
        MouseClick("", $aPos[0] + 429, $aPos[1] + 412, 1, 1) ;ControlClick("[CLASS:NVISetupFrame]", "精简(&E)(推荐)", "[CLASS:ATL:6D480618; INSTANCE:2]") ;点击下一步
        WinWait("[CLASS:NVISetupFrame]", "关闭(&C)") ;等待安装完毕
        Sleep(250)
        MouseClick("", $aPos[0] + 192, $aPos[1] + 156, 1, 1) ;ControlClick("[CLASS:NVISetupFrame]", "关闭(&C)", "[CLASS:ATL:6D476650; INSTANCE:1]", 'left', 1, 10, 10) ;点击取消勾选创建桌面快捷方式
        Sleep(250)
        MouseClick("", $aPos[0] + 192, $aPos[1] + 182, 1, 1) ;ControlClick("[CLASS:NVISetupFrame]", "关闭(&C)", "[CLASS:ATL:6D476650; INSTANCE:1]", 'left', 1, 10, 35) ;点击取消勾选启动Experience
        Sleep(250)
        MouseClick("", $aPos[0] + 533, $aPos[1] + 412, 1, 1) ;ControlClick("[CLASS:NVISetupFrame]", "关闭(&C)", "[CLASS:ATL:6D480618; INSTANCE:2]") ;点击关闭
        WinWaitClose("[CLASS:NVISetupFrame]", "关闭(&C)")
EndIf
发表于 2018-2-28 10:38:55 | 显示全部楼层
直接 alt + a    简单粗暴
 楼主| 发表于 2018-2-28 17:35:15 | 显示全部楼层
本帖最后由 fybhwsx 于 2018-2-28 17:40 编辑

经过测试,控件类名其实就是子窗口类名,不能用正则,只能枚举。每一步的子窗口数量也不一样。下面是简单按照枚举子窗口的排列顺序提取类名实现点击,先偷懒用着。如果下次安装这个顺序也不固定的话,再处理。。
Local $NVIDIA = 'D:\NVIDIA显卡驱动\390.77-notebook-win10-64bit-international-whql\setup.exe'
;安装NVIDIA显卡驱动
If FileExists("C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe") = 0 and FileExists($NVIDIA) Then ;若安装文件存在但默认(或指定)路径未发现安装        
        ShellExecute(_WinAPI_PathFindFileName($NVIDIA), "", _WinAPI_PathRemoveFileSpec($NVIDIA), "open", @SW_SHOWNORMAL) ;运行安装程序
        Local $NVIDIA_ckjb = WinWait("[CLASS:NVISetupFrame]", "同意并继续(&A)")
        If $NVIDIA_ckjb Then
                Local $aData = _WinAPI_EnumChildWindows($NVIDIA_ckjb2)
                ControlClick("[CLASS:NVISetupFrame]", "同意并继续(&A)", $aData[$aData[0][0]][1] & "2") ;点击同意并继续
                WinWait("[CLASS:NVISetupFrame]", "精简(&E)(推荐)")
                Sleep(250)
                ControlClick("[CLASS:NVISetupFrame]", "精简(&E)(推荐)", $aData[$aData[0][0]][1] & "2") ;点击下一步
                Local $NVIDIA_ckjb2 = WinWait("[CLASS:NVISetupFrame]", "关闭(&C)") ;等待安装完毕
                Sleep(250)
                If $NVIDIA_ckjb2 Then
                        Local $aData2 = _WinAPI_EnumChildWindows($NVIDIA_ckjb)
                        ControlClick("[CLASS:NVISetupFrame]", "关闭(&C)", $aData2[1][1] & "1", 'left', 1, 10, 10) ;点击取消勾选创建桌面快捷方式
                        Sleep(250)
                        ControlClick("[CLASS:NVISetupFrame]", "关闭(&C)", $aData2[1][1] & "1", 'left', 1, 10, 35) ;点击取消勾选启动Experience
                        Sleep(250)
                        ControlClick("[CLASS:NVISetupFrame]", "关闭(&C)", $aData[$aData[0][0]][1] & "2") ;点击关闭
                        WinWaitClose("[CLASS:NVISetupFrame]", "关闭(&C)")
                EndIf
        EndIf
EndIf
 楼主| 发表于 2018-3-7 08:36:30 | 显示全部楼层
晕死,ControlClick一直都是用控件类名加接口点击,居然能这样用!!赶紧补上,别把大家带沟里了啊。。。
Local $NVIDIA = 'D:\NVIDIA显卡驱动\390.77-notebook-win10-64bit-international-whql\setup.exe'
ShellExecute(_WinAPI_PathFindFileName($NVIDIA), "", _WinAPI_PathRemoveFileSpec($NVIDIA), "open", @SW_SHOWNORMAL) ;运行安装程序
WinWait("[CLASS:NVISetupFrame]", "同意并继续(&A)")
ControlClick("[CLASS:NVISetupFrame]", "", "同意并继续(&A)") ;点击同意并继续
WinWait("[CLASS:NVISetupFrame]", "自定义(&C)(高级)")
ControlClick("[CLASS:NVISetupFrame]", "", "自定义(&C)(高级)") ;点击自定义(&C)(高级)
ControlClick("[CLASS:NVISetupFrame]", "", "下一步(&N)") ;点击下一步(&N)
WinWait("[CLASS:NVISetupFrame]", "组件列表")
ControlClick("[CLASS:NVISetupFrame]", "", "组件列表", 'left', 1, 13, 50) ;点击取消勾选NVIDIA GeForce Experience(不安装)
ControlClick("[CLASS:NVISetupFrame]", "", "组件列表", 'left', 1, 13, 70) ;点击取消勾选PhysX 系统软件(不安装)
ControlClick("[CLASS:NVISetupFrame]", "", "执行清洁安装(&P)") ;点击执行清洁安装(&P)
ControlClick("[CLASS:NVISetupFrame]", "", "下一步(&N)") ;点击下一步(&N)
WinWait("[CLASS:NVISetupFrame]", "关闭(&C)")
ControlClick("[CLASS:NVISetupFrame]", "", "关闭(&C)") ;点击关闭(&C)
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 19:35 , Processed in 0.075871 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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