chilaidelang 发表于 2012-4-23 10:20:09

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

本帖最后由 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")
但是这行代码运行后,一点反应都没有,哪个地方错了吗?大家帮我瞧一瞧。

happytc 发表于 2012-4-23 13:23:07

本帖最后由 happytc 于 2012-4-23 13:30 编辑

大家帮我看看:
因为电脑里,有一个IE插件,需要每次重启后,运行“超级兔子”进行清理,所以想用au3编写一 ...
chilaidelang 发表于 2012-4-23 10:20 http://www.autoitx.com/images/common/back.gif

非系统标准控件的话,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("")

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 + $aCtrlPos + $iCXBorder + 5, $aWinPos + $aCtrlPos + $iCTitle + $iCYBorder + 5)
        EndIf
EndIf

lixiaolong 发表于 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("")

Local $Handle = ControlGetHandle("", "", "ThunderRT6UserControlDC16")
_WinAPI_PostMessage($Handle, $WM_KEYDOWN, 0x0D, 0)

happytc 发表于 2012-4-23 14:32:16

这样也可以,0x0D是Enter.
lixiaolong 发表于 2012-4-23 14:10 http://www.autoitx.com/images/common/back.gif

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


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

whitehead 发表于 2012-4-23 19:29:10

学习,留个记号

chilaidelang 发表于 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("")
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 + $aCtrlPos + $iCXBorder + 5, $aWinPos + $aCtrlPos + $iCTitle + $iCYBorder + 5)
        EndIf
EndIf上面代码超过我的水平,这四行,我就看不懂了:$iCTitle = _WinAPI_GetSystemMetrics($SM_CYCAPTION)
                              $iCXBorder = _WinAPI_GetSystemMetrics($SM_CXBORDER)
                              $iCYBorder = _WinAPI_GetSystemMetrics($SM_CYBORDER)
                MouseClick("Left", $aWinPos + $aCtrlPos + $iCXBorder + 5, $aWinPos + $aCtrlPos + $iCTitle + $iCYBorder + 5)

chilaidelang 发表于 2012-4-24 05:55:06

本帖最后由 chilaidelang 于 2012-4-24 05:58 编辑

#include <WindowsConstants.au3>
#include <WinAPI.au3>
Run("D:\MagicSet\srck.exe")
WinWaitActive("")
Local $Handle = ControlGetHandle("", "", "ThunderRT6UserControlDC16")
_WinAPI_PostMessage($Handle, $WM_KEYDOWN, 0x0D, 0)lixiaolong的代码确实强,一切成功,没有一次失败。谢谢!Run("D:\MagicSet\srck.exe")
$hWnd = WinWaitActive("")
ControlSend($hWnd, "", "ThunderRT6UserControlDC16", "{ENTER}")这个也可以,ControlSend命令厉害。
再次感谢lixiaolong和happytc 两位大侠!

MicroBlue 发表于 2012-4-24 08:44:38

这个学习了, 很好很强大!#include <WindowsConstants.au3>
#include <WinAPI.au3>
Run("D:\MagicSet\srck.exe")
WinWaitActive("")
Local $Handle = ControlGetHandle("", "", "ThunderRT6UserControlDC16")
_WinAPI_PostMessage($Handle, $WM_KEYDOWN, 0x0D, 0)

Amei595409929 发表于 2013-1-5 17:05:51

好强大的代码$iCTitle = _WinAPI_GetSystemMetrics($SM_CYCAPTION)
                              $iCXBorder = _WinAPI_GetSystemMetrics($SM_CXBORDER)
                              $iCYBorder = _WinAPI_GetSystemMetrics($SM_CYBORDER)
                MouseClick("Left", $aWinPos + $aCtrlPos + $iCXBorder + 5, $aWinPos + $aCtrlPos + $iCTitle + $iCYBorder + 5)这里我也没看明白,有哪位大师愿意科普下
页: [1]
查看完整版本: 菜鸟求助:关于ControlClick,面对超级兔子无效?(已解决)