需求:通过AHK的postmessage打开浏览器的设置、浏览器的拓展列表,无意间忘了在哪里看到了通过
PostMessage, 274, 40022
方式打开拓展,但是又没注释,痛苦的一批,找了win32窗体API,又找了AHKPostMessage
的定义,发现都不是,知识盲区不是一般的大。
AHK通过postmessage设置
先上答案
^!r::
PostMessage, 274, 40022
return
^!s::
PostMessage, 274, 40030
return
;个人理解 40030也是窗体,274也是大方向窗体指确定程序。
;也就是我找到一个工具能个把窗体的代码映射出来即可,应该不是搜postmessage的控件代码。
;↑↑ 上面的推断都是错的!最后发现都是chrome特定设置的,和win32没关系!!
;是怎么找到这个问题的解决办法呢?直接搜40030+edge没用,窗体/控件编号,也没用!
;找到它的变量名 IDC_MANAGE_EXTENSIONS 直接google了,然后就比对编号,还真是!
由此还能写出打开历史、打开下载页面等等。
搜索274的解释
WM_SYSCOMMAND
消息是MFC预定义好的一组命令消息,框架有默认的处理方式,比如点击窗口右上方的关闭按钮,发送SC_CLOSE消息,用以关闭窗口。WM_SYSCOMMAND=274
是一个消息常量,需要配合指定系统命令才会产生作用。
W=Window 窗口
M=Msg 消息
SYS COMMAND=系统指令
SendMessage (取窗口句柄 (), #WM_SYSCOMMAND, #SC_CLOSE, 0) '关闭窗口
#SC_CLOSE=61536
AHK PostMessage
- AHK的
PostMessage
的定义
PostMessage, Msg , wParam, lParam, ...
Msg:要发送的消息号, 可以为表达式. 请参阅消息列表来确定编号.
wParam:消息的第一个组件, 可以为表达式. 默认 0.
lParam:消息的第二个组件, 可以为表达式. 默认 0.
...
- 官方例子: 启动用户选择的屏幕保护程序
SendMessage, 0x0112, 0xF140, 0,, Program Manager
; 0x0112 是 WM_SYSCOMMAND, 而 0xF140 是 SC_SCREENSAVE.
小结
- 知识库不够,真的是学不完,也折腾不完的。
- 基本功能其实也够用了,那些过于专业的功能,业余的折腾起来太费时间了,都本末倒置了。