|

15精币
我在尝试做一个鼠标同步软件,监视鼠标行为,然后通过 PostThreadMessageA 这个 API 将鼠标消息发送给一个子线程处理,但是我发现如果子线程处理业务逻辑的过程中,PostThreadMessageA 继续发送消息,那这部分消息则会丢失,查了很多资料没想明白,按理说我消息发送成功进入队列,然后就是一条一条消费就可以了,不存在丢失的问题。
发送消息和消费消息的示例代码贴在下面,劳烦大佬指点一二
|
处理鼠标消息 | | | |
序号 | 整数型 | | | | 消息类型 | 整数型 | | | | x | 整数型 | | | | y | 整数型 | | | |
模拟 = 真 如果真 (模拟 ) 程序_延时 (1000 ) 返回 () dm = 窗口列表 [序号 ].大漠 如果真 (消息类型 = #WM_MOUSE_LEFT_DOWN ) 调试输出 (“鼠标按下”) dm. MoveTo (x, y ) 程序_延时 (100 ) dm. LeftDown () 如果真 (消息类型 = #WM_MOUSE_LEFT_UP ) 调试输出 (“鼠标放开”) dm. MoveTo (x, y ) 程序_延时 (100 ) dm. LeftUp () 如果真 (消息类型 = #WM_MOUSE_RIGHT_DOWN ) 调试输出 (“鼠标右键按下”) dm. MoveTo (x, y ) 程序_延时 (100 ) dm. RightDown () 如果真 (消息类型 = #WM_MOUSE_RIGHT_UP ) 调试输出 (“鼠标邮件按下”) dm. MoveTo (x, y ) 程序_延时 (100 ) dm. RightUp () 变量名 | 类 型 | 静态 | 数组 | 备 注 | 死循环 | 逻辑型 | | | 接收消息 | 整数型 | | | msg | 消息结构 | | |
窗口列表 [序号 ].线程状态 = #线程状态_运行中 窗口列表 [序号 ].线程ID = 线程_取自线程ID ()PostThreadMessageA (窗口列表 [序号 ].线程ID, #WM_USER, 0, 0 )死循环 = 真 判断循环首 (死循环 ) 接收消息 = PeekMessage (msg, -1, 0, 0, #PM_REMOVE ) 调试输出 (“-------------接收消息结果:” + 到文本 (接收消息 ))  如果真 (接收消息 > 0 ) 调试输出 (“=============== 接收到消息 ==============”)  调试输出 (“hwnd:” + 到文本 (msg.hwnd ))  调试输出 (“message:” + 到文本 (msg.message ))  调试输出 (“wParam:” + 到文本 (msg.wParam ))  调试输出 (“lParam:” + 到文本 (msg.lParam ))  调试输出 (“time:” + 到文本 (msg.time ))  调试输出 (“pt_x:” + 到文本 (msg.pt_x ))  调试输出 (“pt_y:” + 到文本 (msg.pt_y ))  调试输出 (“=============== 接收到消息 END ==============”) 程序_延时 (1000 )  判断循环尾 ()
补充内容 (2025-2-27 11:42):
程序_延时 (1000) 这里用来模拟大漠操作鼠标,在这延时的1秒钟之内,PostThreadMessageA 都将丢失 |
|