jsmart 发表于 2019-6-14 20:29:55

如何后台点击任务栏程序图标激活程序

在写一个自动程序,需要在任务栏上点击程序图标呼出程序主界面,可以用winsetstat激活界面,但这个程序很奇怪,用winsetstat激活的界面显示不完全。如果直接用鼠标点击的话,界面是正常的。因为用在服务器上,需要能够后台激活,试过了systray udf,SysTray_ClickItem,_GUICtrlToolbar_ClickButton, 都不能做到后台激活。
请问要怎样才能后台模拟鼠标点击系统图标呢?

afan 发表于 2019-6-15 20:22:11

本帖最后由 afan 于 2019-6-15 20:41 编辑

估计是任务栏的句柄没获取成功,以下是XP成功点击任务栏第一个按钮的测试
Local $hwnd = ControlGetHandle('', '', 'ToolbarWindow322')
ControlClick($hwnd, '', '', '', 1, 1, 1)

jsmart 发表于 2019-6-15 21:38:33

afan 发表于 2019-6-15 20:22
估计是任务栏的句柄没获取成功,以下是XP成功点击任务栏第一个按钮的测试

谢谢,我的环境是win 2008,参照代码,修改如下未成功。
Local $hwnd = ControlGetHandle('', '', 'ToolbarWindow321')
ControlClick($hwnd, '', '', '', 1, 1, 1)



afan 发表于 2019-6-15 21:58:29

jsmart 发表于 2019-6-15 21:38
谢谢,我的环境是win 2008,参照代码,修改如下未成功。
Local $hwnd = ControlGetHandle('

你可以用 _GUICtrlToolbar_GetMaxSize($hwnd) 检查一下矩形是否正常

jsmart 发表于 2019-6-15 23:26:42

本帖最后由 jsmart 于 2019-6-16 00:12 编辑

afan 发表于 2019-6-15 21:58
你可以用 _GUICtrlToolbar_GetMaxSize($hwnd) 检查一下矩形是否正常
终于基本实现,目前存在的问题就是我只能做到点击第一个图标,我就是在命令之前将程序关闭再重启,保准它位于第一个。代码参考了ControlClickPlus,已经找不到出去了,感谢源码作者,也感谢afan版主,你说任务栏第一个按钮给我了提示,我把整个任务栏当成了一个控件来做。代码如下,纯自学,不足之处,请莫怪。

$hwnd = ControlGetHandle("","", "")
_controlclicktray("","",$hwnd)

Func _ControlClicktray($iTitle, $iText, $iControl)
      Local $counts=_GUICtrlToolbar_ButtonCount($hwnd)
      Local $hwnd = ControlGetHandle($iTitle, $iText, $iControl)
      Local $pos = ControlGetPos($iTitle, $iText, $iControl)
      Local $lParm = "0x" & String(Hex(Int($pos/ 2), 4)) & String(Hex(Int($pos/$counts/ 2), 4))
      _WinAPI_PostMessage($hwnd, 0x200, 0x0, $lParm)
      _WinAPI_PostMessage($hwnd, 0x201, 0x1, $lParm)
      _WinAPI_PostMessage($hwnd, 0x202, 0x0, $lParm)
EndFunc
页: [1]
查看完整版本: 如何后台点击任务栏程序图标激活程序