5735988 发表于 2012-3-22 01:01:51

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

本帖最后由 5735988 于 2012-4-8 10:24 编辑

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

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

风行者 发表于 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("", "", "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, $aPos, 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

zldfsz 发表于 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("", "", "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

马甲 发表于 2012-3-22 10:09:24

可以用 _WinAPI_PostMessage 。

#include <WinAPI.au3>

Const $WM_MOUSEMOVE = 0x200
$hTray = WinGetHandle("")
$hToolbar_Kill = ControlGetHandle($hTray, "", "")
$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

shil1 发表于 2012-3-28 18:23:50

本帖最后由 shil1 于 2012-3-28 18:58 编辑

ProcessClose("QQ.exe")
ProcessWaitClose("QQ.exe")
ControlClick("","", "","middle")

这个多简单,ControlClick后面的点击坐标弄好,只要点到那个QQ ico所在的地方,应当就可以,点错了也没什么影响。不行就多点几个地方遍历那一块所以ico加上个循环^-^

5735988 发表于 2012-4-8 10:20:30

本帖最后由 5735988 于 2012-4-8 10:22 编辑

回复 6# 马甲


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



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

补充,学习了一下,似乎都是通用的。

penguinl 发表于 2012-6-6 04:52:00

看了风行的代码,很受启发,感谢!
页: [1]
查看完整版本: 模拟移动鼠标到QQ2012任务栏的ICO图标,并双击左键;(已解决)