Windows如何知道哪个消息属于哪个进程
How Does Windows Know Which Messages Belong to Which Process?
Windows是否知道哪些消息属于每个特定的窗口(如果是的话,它是如何知道的?)或者它只是发送消息一般,它是由应用程序来抓取它需要的消息?
谢谢大家的回复。我真的很喜欢有人不加解释就投了反对票。
即使在这些先进的64位的日子里,Windows应用程序仍然,最终,在某个深层次的,黑暗的点,仍然由窗口消息处理循环组成。进程的主消息"泵"负责将消息从队列中拉出,并通过SendMessage API的hWnd参数(方法的第一个参数)将它们定向到适当的窗口。
在应用程序中,像单击事件这样的事情最终被转换为消息到一个窗口,如果该窗口决定不处理该消息,则将其传递给父窗口链,直到根据其他参数选择处理它。或者,消息的窗口接收者可以显式地通知父窗口WM_PARENT_NOTIFTY,它刚刚收到的消息导致了父窗口应该知道的事情发生。例如,考虑一下在颜色选择器对话框中更改颜色如何需要通知其父框颜色更改。在大多数应用程序中有无数这样的链式依赖,这解释了你所说的许多编排。
显然,去适当的窗口处理程序接收,说,鼠标点击,一个低级别的系统处理程序必须找出鼠标点击时,和窗口管理器将指向窗口的最高的z值的推理,窗口是活动的一部分应用当时鼠标点击,最终使应用程序和窗口"WM_CLICK"消息的目标。
这是一个相当简单的说明,我相信可能有相关的细节(坑洞?:):)我省略了,但我认为它提供了一个基本问题的画面。
相关文章:
- boost::进程间消息队列引发错误
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 是否可以通过C++扩展强制多个python进程共享同一内存
- IPC使用多个管道和分支进程来运行Python程序
- 异常属于C++中的线程还是进程
- WMI检测进程创建事件-c++
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- c++多进程编写一个唯一的文件
- 如果我已经有一个头,那么模板(-t)文件属于哪里
- 如何在C++中将函数发送到另一个进程
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 终止 QProcess 不会终止子进程
- 进程如何访问不属于其虚拟地址空间的内存映射 IO 地址?
- 使用SendMessage将文本输入到属于另一个进程的编辑控件中
- 在Windows中,如何使用C++或C#在属于另一进程的窗口中获取高亮显示的文本
- Win32:如何在C++中枚举属于进程的所有线程
- C++/Win32 枚举属于我的进程的窗口并关闭它们
- Windows如何知道哪个消息属于哪个进程
- 找到属于我的进程的z顺序中最高的非子窗口
- 执行属于其他进程的外部功能