菜鸟求助:关于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: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: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)
这样也可以,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}")
学习,留个记号 本帖最后由 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: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 两位大侠! 这个学习了, 很好很强大!#include <WindowsConstants.au3>
#include <WinAPI.au3>
Run("D:\MagicSet\srck.exe")
WinWaitActive("")
Local $Handle = ControlGetHandle("", "", "ThunderRT6UserControlDC16")
_WinAPI_PostMessage($Handle, $WM_KEYDOWN, 0x0D, 0) 好强大的代码$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]