找回密码
 加入
搜索
查看: 4293|回复: 8

[AU3基础] 菜鸟求助:关于ControlClick,面对超级兔子无效?(已解决)

  [复制链接]
发表于 2012-4-23 10:20:09 | 显示全部楼层 |阅读模式
本帖最后由 chilaidelang 于 2012-4-24 06:03 编辑

大家帮我看看:
因为电脑里,有一个IE插件,需要每次重启后,运行“超级兔子”进行清理,所以想用au3编写一个自动的脚本。
关于超级兔子:http://www.vdisk.cn/down/index/10030903
这是超级兔子2009年四月标准版,绿色软件,不用安装,解压后,运行其中的有关文件即可。这里需要用到的是srck.exe(超级兔子清理王)(如果srck.exe不能运行,多试两次即可)

编写代码:
run("D:\MagicSet\srck.exe")
WinWaitActive("超级兔子清理王 2009.01 个人版")
代码运行到这里,即出现下列画面,而且,需要点击如下图所示“进行卸载”


于是我又编写代码:
ControlClick("超级兔子清理王 2009.01 个人版","","ThunderRT6UserControlDC16")
但是这行代码运行后,一点反应都没有,哪个地方错了吗?大家帮我瞧一瞧。

本帖子中包含更多资源

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

×
发表于 2012-4-23 13:23:07 | 显示全部楼层
本帖最后由 happytc 于 2012-4-23 13:30 编辑
大家帮我看看:
因为电脑里,有一个IE插件,需要每次重启后,运行“超级兔子”进行清理,所以想用au3编写一 ...
chilaidelang 发表于 2012-4-23 10:20


非系统标准控件的话,ControlClick函数很多时候就不好使了
你可以用MouseClick来点击

下面的代码,是根据你上传的图片里的信息写成,没有实测过(因为没有超级兔子)

#Include <WinAPI.au3>

Global Const $SM_CYCAPTION = 4, $SM_CXBORDER = 5, $SM_CYBORDER = 6
Global $hWnd, $aWinPos, $aCtrlPos, $iCTitle, $iCXBorder, $iCYBorder

run("D:\MagicSet\srck.exe")
$hWnd = WinWaitActive("[CLASS:ThunderRT6FormDC]")

If IsHWnd($hWnd) Then
        $aWinPos = WinGetPos($hWnd)
        $aCtrlPos = ControlGetPos($hWnd, "", "ThunderRT6UserControlDC16")
        If IsArray($aWinPos) And IsArray($aCtrlPos) Then
                $iCTitle = _WinAPI_GetSystemMetrics($SM_CYCAPTION)
                $iCXBorder = _WinAPI_GetSystemMetrics($SM_CXBORDER)
                $iCYBorder = _WinAPI_GetSystemMetrics($SM_CYBORDER)
                MouseClick("Left", $aWinPos[0] + $aCtrlPos[0] + $iCXBorder + 5, $aWinPos[1] + $aCtrlPos[1] + $iCTitle + $iCYBorder + 5)
        EndIf
EndIf
发表于 2012-4-23 14:10:50 | 显示全部楼层
本帖最后由 lixiaolong 于 2012-4-23 14:17 编辑

这样也可以,0x0D是Enter.
#include <WindowsConstants.au3>
#include <WinAPI.au3>

Run("D:\MagicSet\srck.exe")
WinWaitActive("[CLASS:ThunderRT6FormDC]")

Local $Handle = ControlGetHandle("[class:ThunderRT6FormDC]", "", "ThunderRT6UserControlDC16")
_WinAPI_PostMessage($Handle, $WM_KEYDOWN, 0x0D, 0)
发表于 2012-4-23 14:32:16 | 显示全部楼层
这样也可以,0x0D是Enter.
lixiaolong 发表于 2012-4-23 14:10


呵,不错,模拟发送按键
若是可用,那么下面的应该也可以


Run("D:\MagicSet\srck.exe")
$hWnd = WinWaitActive("[CLASS:ThunderRT6FormDC]")
ControlSend($hWnd, "", "ThunderRT6UserControlDC16", "{ENTER}")

评分

参与人数 1金钱 +10 收起 理由
lixiaolong + 10 呵呵,可以~

查看全部评分

发表于 2012-4-23 19:29:10 | 显示全部楼层
学习,留个记号
 楼主| 发表于 2012-4-24 04:32:37 | 显示全部楼层
本帖最后由 chilaidelang 于 2012-4-24 06:00 编辑

谢谢happytc!试着运行下面代码,成功了。不过,有时候偶尔失败,不知道为什么,好象跟脚本运行前,鼠标在屏幕上的位置有关吧。
#Include <WinAPI.au3>
Global Const $SM_CYCAPTION = 4, $SM_CXBORDER = 5, $SM_CYBORDER = 6
Global $hWnd, $aWinPos, $aCtrlPos, $iCTitle, $iCXBorder, $iCYBorder
run("D:\MagicSet\srck.exe")
$hWnd = WinWaitActive("[CLASS:ThunderRT6FormDC]")
If IsHWnd($hWnd) Then
        $aWinPos = WinGetPos($hWnd)
        $aCtrlPos = ControlGetPos($hWnd, "", "ThunderRT6UserControlDC16")
        If IsArray($aWinPos) And IsArray($aCtrlPos) Then
                $iCTitle = _WinAPI_GetSystemMetrics($SM_CYCAPTION)
                                $iCXBorder = _WinAPI_GetSystemMetrics($SM_CXBORDER)
                                $iCYBorder = _WinAPI_GetSystemMetrics($SM_CYBORDER)
                MouseClick("Left", $aWinPos[0] + $aCtrlPos[0] + $iCXBorder + 5, $aWinPos[1] + $aCtrlPos[1] + $iCTitle + $iCYBorder + 5)
        EndIf
EndIf
上面代码超过我的水平,这四行,我就看不懂了:
$iCTitle = _WinAPI_GetSystemMetrics($SM_CYCAPTION)
                                $iCXBorder = _WinAPI_GetSystemMetrics($SM_CXBORDER)
                                $iCYBorder = _WinAPI_GetSystemMetrics($SM_CYBORDER)
                MouseClick("Left", $aWinPos[0] + $aCtrlPos[0] + $iCXBorder + 5, $aWinPos[1] + $aCtrlPos[1] + $iCTitle + $iCYBorder + 5)
 楼主| 发表于 2012-4-24 05:55:06 | 显示全部楼层
本帖最后由 chilaidelang 于 2012-4-24 05:58 编辑
#include <WindowsConstants.au3>
#include <WinAPI.au3>
Run("D:\MagicSet\srck.exe")
WinWaitActive("[CLASS:ThunderRT6FormDC]")
Local $Handle = ControlGetHandle("[class:ThunderRT6FormDC]", "", "ThunderRT6UserControlDC16")
_WinAPI_PostMessage($Handle, $WM_KEYDOWN, 0x0D, 0)
lixiaolong的代码确实强,一切成功,没有一次失败。谢谢!
Run("D:\MagicSet\srck.exe")
$hWnd = WinWaitActive("[CLASS:ThunderRT6FormDC]")
ControlSend($hWnd, "", "ThunderRT6UserControlDC16", "{ENTER}")
这个也可以,ControlSend命令厉害。
再次感谢lixiaolong和happytc 两位大侠!
发表于 2012-4-24 08:44:38 | 显示全部楼层
这个学习了, 很好很强大!
#include <WindowsConstants.au3>
#include <WinAPI.au3>
Run("D:\MagicSet\srck.exe")
WinWaitActive("[CLASS:ThunderRT6FormDC]")
Local $Handle = ControlGetHandle("[class:ThunderRT6FormDC]", "", "ThunderRT6UserControlDC16")
_WinAPI_PostMessage($Handle, $WM_KEYDOWN, 0x0D, 0)
发表于 2013-1-5 17:05:51 | 显示全部楼层
好强大的代码
$iCTitle = _WinAPI_GetSystemMetrics($SM_CYCAPTION)
                                $iCXBorder = _WinAPI_GetSystemMetrics($SM_CXBORDER)
                                $iCYBorder = _WinAPI_GetSystemMetrics($SM_CYBORDER)
                MouseClick("Left", $aWinPos[0] + $aCtrlPos[0] + $iCXBorder + 5, $aWinPos[1] + $aCtrlPos[1] + $iCTitle + $iCYBorder + 5)
这里我也没看明白,有哪位大师愿意科普下
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-24 10:20 , Processed in 0.159409 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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