精易论坛

标题: 窗口队列消息例子 [打印本页]

作者: 帅气与大侠    时间: 2025-3-20 23:47
标题: 窗口队列消息例子
本帖最后由 帅气与大侠 于 2025-3-20 23:57 编辑

前面问答区看到一个提问:
普通窗口怎么判断标题栏左键按下和弹起_精易论坛
易窗口消息中是无法拦截到非客户区的左键放开消息的,按下左键时窗口就触发了移动,包括窗口的很多信息实际上都做了相关处理和删除了

要检测到所有的窗口动作,得从系统转发给进程的队列消息入手
窗口消息也是从队列消息里获取的,下面是拦截队列消息的小例子,可以在消息到达窗口之前得到,就不会丢失消息了

源码下载: 队列消息.e (12.12 KB, 下载次数: 30)
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
m_WndMouse整数型  

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
m_WndMouse = SetWindowsHookExA ( #WH_GETMESSAGE, &WNDMOUSE, GetModuleHandleA (字符 (0)), GetCurrentThreadId ())
子程序名返回值类型公开备 注
WNDMOUSE整数型 
参数名类 型参考可空数组备 注
nCode整数型小于零时直接调用CallNextHookEx返回。
wParam整数型0=消息还未从队列删除;1=消息已经从队列删除;2=其它特殊队列消息(如弹出菜单,窗口默认不处理的消息等)
lParam整数型指向tagMSG消息结构,该结构大小32字节
变量名类 型静态数组备 注
msgtagMSG 
LBDown逻辑型 
RBDown逻辑型 
MBDown逻辑型 
如果真 (nCode > -1)
GetMsg (lParam, msg)
' 非客户区,如标题栏、边框等鼠标消息
判断 (msg.message = 160)  ' 鼠标移动
' msg.wParam参数是鼠标在窗口的非客户区具体区域:
' 2=标题栏;3=图标;8=最小化;9=最大化;18=边框;20=关闭;
调试输出 (msg.wParam)
判断 (msg.message = 161)  ' 鼠标左键
调试输出 (“鼠标左键按下”)
LBDown = 真
判断 (msg.message = 160 LBDown = msg.message = 514 LBDown = )
LBDown = 假
调试输出 (“鼠标左键放开”)
判断 (msg.message = 164)  ' 鼠标右键
调试输出 (“鼠标右键按下”)
RBDown = 真
判断 (msg.message = 517 RBDown = msg.message = 165 RBDown = )
RBDown = 假
调试输出 (“鼠标右键放开”)
判断 (msg.message = 167)  ' 鼠标中键
MBDown = 真
调试输出 (“鼠标中键按下”)
判断 (msg.message = 168 msg.message = 520 MBDown = )
MBDown = 假
调试输出 (“鼠标中键放开”)
判断 (msg.message = 171)  ' 侧键按下
判断 (GetH16 (msg.wParam) = 1)  ' 侧键下
调试输出 (“鼠标侧键下 按下”)
调试输出 (“鼠标侧键上 按下”)

判断 (msg.message = 172)  ' 侧键放开
判断 (GetH16 (msg.wParam) = 1)  ' 侧键下
调试输出 (“鼠标侧键下 放开”)
调试输出 (“鼠标侧键上 放开”)




' 其它消息自行捕捉
' 如窗口激活、焦点、重画、按下某键、转发给窗口组件的消息等等均可以捕获
' 调试输出 (msg.message)

返回 (CallNextHookEx (m_WndMouse, nCode, wParam, lParam))
' *** 缩略程序块 ***



i支持库列表   支持库注释   
spec特殊功能支持库


作者: wh1234567    时间: 2025-3-21 00:14
感谢分享
作者: huhuhuf    时间: 2025-3-21 01:04
感谢分享
作者: ssoyee    时间: 2025-3-21 01:11
感谢大佬分享
作者: q2356364305    时间: 2025-3-21 02:51
感谢分享

作者: pshq123    时间: 2025-3-21 04:31
谢谢分享
作者: renhe2018    时间: 2025-3-21 06:57
非常不错的思路。给力。
作者: 豆豆灰常开心    时间: 2025-3-21 07:11
已经顶贴,感谢您对论坛的支持!
作者: 查过    时间: 2025-3-21 07:16
感谢楼主分享!
作者: sadamu999    时间: 2025-3-21 07:34
感谢楼主分享!
作者: 李泽勇2    时间: 2025-3-21 07:55
感谢分享这么好的例子,学习了。
作者: 美味萝卜    时间: 2025-3-21 08:45
感谢分享
作者: kyo9766    时间: 2025-3-21 09:34
新技能已get√,感谢分享
作者: wmv520    时间: 2025-3-21 10:14
        感谢分享,很给力!~
作者: 1184798949    时间: 2025-3-21 10:37
感谢分享
作者: 1184798949    时间: 2025-3-21 10:49
感谢分享
作者: 何浩文    时间: 2025-3-21 11:23
支持开源~!感谢分享
作者: ensurf    时间: 2025-3-21 11:26
支持开源~!感谢分享
作者: 宁静清澈    时间: 2025-3-21 13:18
支持开源~!感谢分享
作者: pipicool    时间: 2025-3-21 14:18
学习一下
作者: 亿万    时间: 2025-3-21 20:23
        感谢分享
作者: 283688410    时间: 2025-3-21 21:03
谢谢分享
作者: kiss0459    时间: 2025-3-22 00:27
能不能搞个获取外部窗口消息的呀?
作者: 豆豆灰常开心    时间: 2025-3-22 07:07
已经顶贴,感谢您对论坛的支持!
作者: 查过    时间: 2025-3-22 07:11
感谢分享,很给力!~
作者: year1970    时间: 2025-3-22 07:55
感谢分享
作者: please    时间: 2025-3-22 09:36
感谢分享,支持开源!!!
作者: lassgo    时间: 2025-3-22 10:24
这不就巧了嘛,我前两天也遇到这问题,琢磨半天才搞定。楼主可以试试在按下时标记个状态,弹起时检查这个状态来判断是不是标题栏左键操作呢。哈,希望有点帮助啊。
作者: cqcc    时间: 2025-3-22 16:27
感谢分享
作者: 闽字科技    时间: 2025-3-23 03:12
怎么做的
作者: please    时间: 2025-3-23 09:39
感谢分享,支持开源!!!
作者: qqmqqg    时间: 2025-3-23 09:54
6666666666666666
作者: bh8cxf    时间: 2025-3-24 08:50
感谢分享,支持开源!!!
作者: q278330360    时间: 2025-3-24 12:52
6666666666666666666666666666666
作者: zifeiyu    时间: 2025-3-24 13:04
66666666666666666666666666




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4