【AHK】postmessage的使用方法/参数查询/win32API/SPY窗体捕捉使用

AHK中有两个命令一直都没搞明白它们的使用方法——PostMessage和SendMessage,百度的结果真的隐晦,还有说要对win32API熟悉才行,害我又去查win32API的列表找这类书籍的pdf,越查越糊涂。
现在终于都知道怎么查找了这些所谓的Message上的十六位数字是什么意思了,以及他们的参数怎么去查询
总结:这种东西还是得回去看手册,但是嘛,开始也是知道这个道理的,但是在search上怎么找都是只有PostMessage的函数解释,偶尔机会又翻看了一次又发现一些东西,特意记下来,帮助像我当初忙头苍蝇的业余选手到处撞,不需要对win32API特别熟悉也能用。
解决方法:首先理解两个函数参数放的啥玩意,然后关键是把窗口句柄,以及菜单句柄给获取到,这里就牵涉到或许这些句柄的工具了,很多介绍都不管用,光这一步都阻碍了很久,好不容易找到句柄工具了,但是不会用也是要命,离PostMessage的实现只差一步之遥,也就是winspy类软件的使用方法,本文用的是它windows detective,对比发现也只有它能用。

首先,一段代码为例子,需求是在q-dir上添加额外的快捷键,但是WinMenuSelectItem这个菜单函数调用不了,然后注释的代码是我原先的解决方案,会跟软件自带的软件冲突,所有还是得PostMessage
然后,PostMessage函数,个人习惯配合#IfWinActive 一起使用,所以参数上就只含有两个,也就是命令的类型执行的命令(也就是句柄),常规的话还是有很多参数在后面跟着的,具体的话可以查手册,这里只需要用到前两个就够了。

#IfWinActive ahk_exe q-dir.exe

^+n:: ;新建文件夹
;send !vwf
PostMessage, 0x0111, 5034
return

^+t:: ;新建记事本
;send !vwt
PostMessage, 0x0111, 5048
return

^+s:: ;新建快捷方式
;send !vws
PostMessage, 0x0111, 5035
return

#IfWinActive

查询句柄的工具

这里是最大的关卡,因为业余一直找不到正确的开启办法

图片上的很多都是绿色版,不知道为什么就是用不了,没有一个能打!! 然后无意间发现个windows detective客户端,终于等到了!!
在这里插入图片描述
打开之后首先捕捉一个窗口
在这里插入图片描述
然后打开message,
在这里插入图片描述
打开过滤器 exclude全部只留下wm_command ,然后就去q-dir.exe软件通过菜单执行新建文件夹或自己想实现的操作
在这里插入图片描述
然后回去看message就可以看到,注意,定位一定要准确,定位到菜单栏,否则message会没东西的
在这里插入图片描述
注:只是一个参考思路,不一定奏效。

设置快捷键

然后就可以配合postmessage生成相应快捷键了,就像开头解释的那样了

附:0x0111的类型是 WM_COMMAND,点击菜单, 点击子窗口按钮。也就是功能就是专门点击菜单用
而下面这个0x0112则是 WM_SYSCOMMAND 点击窗口标题栏右键菜单

例如:
在这里插入图片描述

官方API介绍
在这里插入图片描述

小结

关于命令类型,可以从下面的消息列表查看,确实挺多的,真学无止境,要想实现其他非点击菜单的命令,确实得熟悉才行。。。
功能基本够用就行,多也记不住,折腾不来
也不怪得找不到什么教程,试了一圈,记事本和资源管理器的句柄都捕获不了,也就只有Q-dir可以,其他程序更是只显示只要一个窗体,连菜单句柄都没有。一个词总结就是,难用!!! 新版本窗体控件开发的都抓不,就是个WinMenuSelectItem的替代品,而且都是淘汰产品。

参考

因为关注点在sendmessage的函数方法的使用上,而没有发现两个

sendmessage的使用方法

windows消息列表

WinMenuSelectItem的函数,这个除了记事本其他程序都没成功过。

sendmessage/postmessage函数

官方win32API介绍 ——wm-syscommand

课后作业

照着AHK给的例子写了几个,还看了官方API扩展了些
业余的应该也就能实现这些了,不然给的例子也不会那么普通



#1:: ;改标题,操作窗体 0x000C is WM_SETTEXT
SendMessage, 0x000C, 0, "New Title" 
return


#2:: ;有些窗体操作需要配合其他函数 WM_VSCROLL := 0x0115
ControlGetFocus, control, A ;上滑
SendMessage, 0x0115	, 0, 0, %control%, A
return

#3:: ;水平右滑
ControlGetFocus, control, A ;窗体 WM_HSCROLL := 0x0114
SendMessage, 0x0114, 1, 0, %control%, A
return

#4:: 下滑;
ControlGetFocus, control, A 
SendMessage, 0x0115, 1, 0, %control%, A
return

#5:: ;关闭窗口
SendMessage, 0x0010
return


;#e:: ;这个是win消息列表 移动窗体,可能得结合相关参数
;SendMessage, 0x0003 ;并不能直接用
;return
以下是嗅探后的截图 用了也不会用就不在专业范围了。。
在这里插入图片描述
在这里插入图片描述

#e:: ;换了种方式 通过system command指令 WM_SYSCOMMAND := 0x0112
PostMessage, 0x0112,0xF010 ;通过WM_SYSCOMMAND的官网API查到 SC_MOVE 0xF010
return
#e:: ;换了种方式 换成十进制一样是可以的
PostMessage, 0x0112,61456 

;在窗口句柄捕捉工具摸索不了什么,因为都唔说明函数,且每种命令类型的用法不一样
;然后利用 举一反三,鉴于自己IDE知识水平,实现的功能有限,
;可以说只有点击菜单栏有用,其他都不如直接用快捷键组合更好理解和修改


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值