![]() |
1
4
如果消息是标准窗口的消息之一(通常消息ID在0和wm_用户之间),那么系统窗口消息调度逻辑包含代码,用于将结构封送到消息调度到的任何进程。 wm_用户以上的消息不会得到这样的处理——这包括Windows 95中引入的所有常见控制消息——您不能在不同的进程中将任何lvm_*(列表视图消息)或其他新的控制消息终止到控件,并返回结果。 wm-copydata被专门介绍为用户代码在进程之间封送任意数据的通用机制-在wm-copydata(或重用其他Windows标准消息)之外,没有办法让Windows使用消息队列机制自动封送结构化数据到其他进程。 如果您自己的代码负责发送和接收消息,则可以使用dll定义共享内存节,而不是发送指针(dll在每个进程中的基础可能不同)将偏移量发送到共享内存块。 如果要与不封送数据的外部应用程序交换结构化数据(例如从列表或树视图中提取数据),则需要执行DLL注入,以便可以从“进程内”发送和处理消息。 sendNoFityMessage与postmessage不同,因为postmessage总是将消息放入消息队列,而sendNotifyMessage在同一进程中与Windows的sendmessage类似。然后,即使目标窗口在另一个进程中,消息也会直接发送到窗口进程,而不是通过getmessage或peekmessage放在已发布消息队列中进行检索。 最后,可能导致死锁——但是,在“阻塞”sendmessage等待另一个线程回复时,sendmessage将从其他线程发送(未发布)消息,以防止死锁。这可以缓解大多数潜在的死锁,但仍然可以通过调用其他阻塞API或进入模式消息处理循环来创建死锁。 |
![]() |
2
0
您的担忧主要适用于进程之间发送的消息——在进程内,您只需发送一个指针,发送者只需确保数据在接收器使用完之前保持有效。
一些进程间消息要求您使用
一般来说,您不能通过修改收到的块来返回值。要返回值,您需要(例如)发送回复消息。
|
![]() |
Community wiki · 需要改变的用户界面模式? 1 年前 |
![]() |
LITzman · 使用状态处理颜色主题更改 1 年前 |
![]() |
Community wiki · 进程。退出(0):输出消失? 1 年前 |
![]() |
arsaces · 将文本添加到特定文件的末尾 2 年前 |
![]() |
YGranja · 库<图形。h> MinGW-W64缺少 2 年前 |
![]() |
Felipe Palermo · Ctrl键仍被按下,按键事件() 2 年前 |
![]() |
HCJ · win cmd中的批处理脚本循环 2 年前 |