对于后台执行鼠标操作的补充

最近又在用ahk进行游戏辅助小工具的开发了,那种一万个挂机窗口最小化挂机的游戏,之前都只用到了后台键盘操作,这次终于用到后台鼠标操作了,然后ControlClick并不能满足要求,因为窗口在激活状态的时候,你的鼠标操作会导致ControlClick的坐标参数不能正确生效,我修改了我之前发布的文章,并提供了一个很麻瓜的解决方案(执行ControlClick相关代码前通过代码先一步将窗口最小化,实测有效)

这里提供一个不那么麻瓜的方案:(这也是关于SendMessage/PostMessage发送鼠标控制消息的一段示例代码)

global WM_MOUSEMOVE := 0x0200  ; 移动鼠标.
global WM_LBUTTONDOWN := 0x0201  ; 按下鼠标左键.
global WM_LBUTTONUP := 0x0202  ; 释放鼠标左键.

;单击鼠标左键,waId:窗口的ahk_id,_x:相对于窗口的横坐标,_y:相对于窗口的纵坐标,坐标可通过MouseGetPos获取,sync:同步/异步发送消息,默认同步
clickL(waId,_x,_y,sync:=1){
   baseSendFun(WM_MOUSEMOVE,waId,_x,_y,sync)
   baseSendFun(WM_LBUTTONDOWN,waId,_x,_y,sync)
   baseSendFun(WM_LBUTTONUP,waId,_x,_y,sync)
}
baseSendFun(msgId,waId,p1,p2,sync:=1){
    ;msgbox %waId% , %msgId% , %p1% ,%p2%
    if (!waId||!msgId){
        return
    }
	lParam:=p1+(p2<<16)
    if (sync){
        SendMessage,msgId,0,lParam,, ahk_id %waId%  ;此处的第二个参数0既wParam表示不依赖任何其他按键的状态,你有其他需求需要去查阅windows消息的API指南
    }else{
        PostMessage,msgId,0,lParam,, ahk_id %waId%  
    }
}

这个方案在窗口激活且你的鼠标在窗口中活动时依旧会影响代码的执行,但是当你停止动作的时候他就会自动恢复到正常运行的状态,因此你可以通过窗口&鼠标当前状态的判定来避免影响

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA捐赠
共{{data.count}}人
人已捐赠
教程

单文件静默安装包 2024年6月14日

2024-6-14 12:53:02

其他应用教程案例

; 每隔10分钟定时关闭并重启蘑菇游戏下载器,防止下载器卡死宕机死机停止下载的AutoHotkey脚本2024年8月7日

2024-8-7 9:33:05

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
有新私信 私信列表
搜索