Если сообщение является одним из сообщений стандартного окна - обычно с идентификатором сообщения от 0 до WM_USER, то логика диспетчеризации сообщений системного окна содержит код для упорядочения структуры для любых процессов, которым отправлено сообщение.
Сообщения выше WM_USER не обрабатываются таким образом - и это включает в себя все распространенные сообщения управления, представленные в Windows 95 - вы не можете завершить ни одно из сообщений LVM_ * (представление списка) или других новых сообщений управления для элемента управления в другом процессе и получить результат обратно.
WM_COPYDATA была специально введена как механизм общего назначения для пользовательского кода для маршалинга произвольных данных между процессами - вне WM_COPYDATA (или повторного использования других стандартных оконных сообщений) нет способа получить окна для автоматического маршалинга структурированных данных с использованием механизма очереди сообщений в другой процесс.
Если отправка и получение сообщений выполняется вашим собственным кодом, вы можете использовать dll для определения раздела совместно используемой памяти, вместо того, чтобы отправлять указатели (dll может быть по-разному базироваться в каждом процессе), отправляет смещения в совместно используемую память блок.
Если вы хотите обмениваться структурированными данными с внешними приложениями, которые не упорядочивают свои данные (например, для извлечения данных из списка или представления дерева), то вам нужно выполнить dll-инъекцию, чтобы вы могли отправлять и обрабатывать сообщение из «в» -процесс».
SendNofityMessage отличается от PostMessage, поскольку PostMessage всегда помещает сообщение в очередь сообщений, тогда как SendNotifyMessage действует как SendMessage для окон в одном и том же процессе. Затем, даже если целевое окно находится в другом процессе, сообщение отправляется ПРЯМО в оконный процесс, не помещенный в очередь опубликованных сообщений для получения через GetMessage или PeekMessage.
Наконец, возможно вызвать взаимоблокировку - однако в то время как в «блокирующем» sendmessage, ожидающем ответа другого потока, SendMessage будет отправлять сообщения, отправленные (не опубликованные) из других потоков, чтобы предотвратить взаимные блокировки. Это уменьшает большинство потенциальных взаимоблокировок, но все еще можно создавать взаимоблокировки, вызывая другие блокирующие apis или входя в модальные циклы обработки сообщений.