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

[效率算法] 模拟移动鼠标到QQ2012任务栏的ICO图标,并双击左键;(已解决)

  [复制链接]
发表于 2012-3-22 01:01:51 | 显示全部楼层 |阅读模式
本帖最后由 5735988 于 2012-4-8 10:24 编辑

模拟移动鼠标到QQ2012任务栏的ICO图标,并双击左键;

用 ProcessClose ("QQ.exe")   关闭QQ,老是会存留下 ICO 图标,只能模拟鼠标移动过去,他才会消失,
目的:用 ProcessClose ("QQ.exe") 关闭QQ后,清除任务栏的 CIO图标。

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2012-3-22 05:58:21 | 显示全部楼层
本帖最后由 风行者 于 2012-3-22 06:06 编辑

刚好有空,写个刷新托盘工具栏的函数

#include <GUIToolbar.au3>

;例子=====================
ProcessClose("QQ.exe")
ProcessWaitClose("QQ.exe")
_ResTray()
;==========================


;刷新托盘函数
Func _ResTray()
        ;获取托盘工具栏句柄
        $hTray = ControlGetHandle("[class:Shell_TrayWnd]", "", "ToolbarWindow321")
        Local $iMode = Opt("MouseCoordMode", 1)
        Local $aPos = MouseGetPos()
        ;鼠标移动到全部托盘图标
        For $i = 0 To _GUICtrlToolbar_ButtonCount($hTray)
                $tId = _GUICtrlToolbar_IndexToCommand($hTray, $i)
                __Press_Button($hTray, $tId)
        Next
        MouseMove($aPos[0], $aPos[1], 0)
        Opt("MouseCoordMode", $iMode)
EndFunc   ;==>_ResTray

Func __Press_Button($hWnd, $iCommandID)
        Local $tRect = _GUICtrlToolbar_GetButtonRectEx($hWnd, $iCommandID)
        Local $tPoint = _WinAPI_PointFromRect($tRect)
        $tPoint = _WinAPI_ClientToScreen($hWnd, $tPoint)
        Local $iX, $iY
        _WinAPI_GetXYFromPoint($tPoint, $iX, $iY)
        MouseMove($iX, $iY, 0)
EndFunc   ;==>__Press_Button

发表于 2012-3-22 06:31:24 | 显示全部楼层
本帖最后由 zldfsz 于 2012-3-22 08:14 编辑

回错贴了,看看
发表于 2012-3-22 06:34:47 | 显示全部楼层
论坛搜索有刷新托盘的函数,但感觉并不完美
上面的函数也有鼠标移动的轨迹,并不完美
还是重新开个帖子了
发表于 2012-3-22 07:05:17 | 显示全部楼层
根据托盘提示文本删除比较完美
#include <GUIToolbar.au3>

;例子=====================
ProcessClose("QQ.exe")
ProcessWaitClose("QQ.exe")
_ResTray("QQ")
;==========================


;刷新托盘函数
Func _ResTray($tip)
        ;获取托盘工具栏句柄
        $hTray = ControlGetHandle("[class:Shell_TrayWnd]", "", "ToolbarWindow321")
        ;删除托盘图标
        For $i = 0 To _GUICtrlToolbar_ButtonCount($hTray)-1
                $tId = _GUICtrlToolbar_IndexToCommand($hTray, $i)
                $tText = _GUICtrlToolbar_GetButtonText($hTray, $tId)
                If StringInStr($tText,$tip) Then _GUICtrlToolbar_DeleteButton($hTray, $tId)
        Next
EndFunc   ;==>_ResTray

评分

参与人数 1金钱 +10 收起 理由
user3000 + 10

查看全部评分

发表于 2012-3-22 10:09:24 | 显示全部楼层
可以用 _WinAPI_PostMessage 。

#include <WinAPI.au3>

Const $WM_MOUSEMOVE = 0x200
$hTray = WinGetHandle("[CLASS:Shell_TrayWnd]")
$hToolbar_Kill = ControlGetHandle($hTray, "", "[CLASSNN:ToolbarWindow321]")
$tRect = _WinAPI_GetClientRect($hToolbar_Kill)
$tR = DllStructGetData($tRect, "Right")
$tB = DllStructGetData($tRect, "Bottom")
For $X = 1 To $tR
        For $Y = 1 To $tB
                $Pos = $X + $Y * 65536
                _WinAPI_PostMessage($hToolbar_Kill, $WM_MOUSEMOVE, 0, $Pos)
        Next
Next

评分

参与人数 2金钱 +50 贡献 +5 收起 理由
lixiaolong + 30 + 5 学习了!
afan + 20

查看全部评分

发表于 2012-3-28 18:23:50 | 显示全部楼层
本帖最后由 shil1 于 2012-3-28 18:58 编辑

ProcessClose("QQ.exe")
ProcessWaitClose("QQ.exe")
ControlClick("[CLASS:Shell_TrayWnd]","", "[CLASSNN:ToolbarWindow321]","middle")

这个多简单,ControlClick后面的点击坐标弄好,只要点到那个QQ ico所在的地方,应当就可以,点错了也没什么影响。不行就多点几个地方遍历那一块所以ico加上个循环^-^
 楼主| 发表于 2012-4-8 10:20:30 | 显示全部楼层
本帖最后由 5735988 于 2012-4-8 10:22 编辑

回复 6# 马甲


    CLASS:Shell_TrayWnd]"  这个是状态栏那里,
"[CLASSNN:ToolbarWindow321]  这个呢



这个内部句柄是如何获得的。如果是别的,比如TM呢,如何获得

补充,学习了一下,似乎都是通用的。
发表于 2012-6-6 04:52:00 | 显示全部楼层
看了风行的代码,很受启发,感谢!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-20 22:52 , Processed in 0.089584 second(s), 30 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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