如何知道鼠标是否点击了当前程序?

JimCarter
博客专家认证
2018-02-27 05:21:45
用wpf做了一个程序,有多个窗体。
当用户鼠标点击时,想知道用户点击的是否是当前程序?
现在是用线程钩子做的,监听鼠标消息,在子线程中安装的 SetWindowsHookEx(WH_MOUSE, currentProc, GetModuleHandle("user32"), threadId),其中threadId是UI线程的id。
但是不知道为什么有时候却收不到消息?起初怀疑是实际项目中如果UI线程卡顿,可能会丢失消息,但是把这块功能单独分离出来测的时候,UI线程卡顿也不会丢失消息。
想问下是否还有其他更好的方法?
...全文
427 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
JimCarter 2018-03-01
  • 打赏
  • 举报
回复
也感谢一二楼的热心回答,结帖给分了
JimCarter 2018-03-01
  • 打赏
  • 举报
回复
解决了: 1.订阅事件,操作系统的消息都会通过Dispather分发到各个窗口
ComponentDispatcher.ThreadFilterMessage += ComponentDispatcher_ThreadFilterMessage;
2.对应的方法

private void ComponentDispatcher_ThreadFilterMessage(ref MSG msg, ref bool handled)
        {
            if (msg.message == 513)//513是鼠标左键的MouseDown消息,MSG结构体中有对应的这个msg要发送到哪个窗口的句柄等信息,如果要中止消息的传播设置handled为true
            {
                //todo
            }
        }
灵感来源:https://www.cnblogs.com/therock/articles/2140459.html
SoulRed 2018-02-28
  • 打赏
  • 举报
回复
在每个窗体上放置一个透明的panel,而且要求点击事件可以穿过panel(传递到下层控件) 然后就是进程间通信了,可用socket也可用内存共享,也可用用文本。。。 思路是这样的,实现起来有点麻烦。。。
exception92 2018-02-28
  • 打赏
  • 举报
回复
当用户鼠标点击时,想知道用户点击的是否是当前程序? ->通过点击不同得窗口判断“当前程序”,这怎么理解呢,在mouseDown 事件中捕获,通过属性 Application.Current.MainWindow 来判断主窗口是否正确,不确定是否可行。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧