|
|
发表于 2026-1-27 11:59:21
|
显示全部楼层
广东省广州市
.版本 2
.支持库 eAPI
.支持库 spec
.程序集 窗口程序集_启动窗口
.程序集变量 按钮句柄, 整数型
.程序集变量 主窗口句柄, 整数型
.子程序 __启动窗口_创建完毕
' 1. 先获取主窗口句柄(根据窗口标题,替换成你的目标窗口标题)
主窗口句柄 = 窗口_取句柄 (, , “目标窗口标题”)
' 2. 用FindWindowEx获取按钮控件句柄(需要知道按钮的类名或文本,可用Spy++查看)
按钮句柄 = FindWindowEx (主窗口句柄, 0, “Button”, “按钮上的文本”)
' 3. 启动时钟(间隔20000毫秒=20秒)
时钟1.时钟周期 = 20000
.子程序 _时钟1_周期事件
' 每隔20秒执行一次点击
.如果真 (按钮句柄 ≠ 0)
' 直接给按钮发送点击消息,无需坐标,后台稳定生效
SendMessage (按钮句柄, 245, 0, 0) ' 245就是BM_CLICK消息
调试输出 (“已触发后台点击”)
.如果真结束
.子程序 窗口_取句柄, 整数型, 公开, 根据窗口标题取句柄
.参数 窗口标题, 文本型
返回 (FindWindowA (0, 窗口标题))
你用 窗口_取句柄 拿到的是整个主窗口的句柄,但目标按钮是子控件,必须获取这个按钮的控件句柄,而不是主窗口句柄。
你用的固定坐标(224,79)是屏幕坐标,但后台点击需要的是相对于目标窗口客户区的坐标,而且如果窗口移动了,这个坐标就完全失效了。
直接给主窗口发鼠标消息,系统不会把它转发给子按钮,必须把消息直接发给按钮的控件句柄。
你说 每隔 20 秒但现有代码里没看到定时器启动或循环触发的逻辑,导致点击只执行了一次。
用 Spy++ 精准定位控件
先运行代码,看 调试输出 里有没有 “已触发后台点击”,确认定时器是否正常
如果没触发,检查 主窗口句柄 和 按钮句柄 是否为 0,用调试输出看具体值。
如果句柄为 0,说明窗口标题或按钮文本填错了,用 Spy++ 重新确认。 |
评分
-
| 参与人数 1 | 荣誉 +1 |
收起
理由
|
笨潴
| + 1 |
热心帮助他人,荣誉+1,希望继续努力(*^__^*) 嘻嘻! |
查看全部评分
|