Знаю что тема обсосана уже миллион раз, но уже второй день не могу найти причину.
Есть два разных приложения, одно из них шлет т.н. ping-сообщения второму, второе отчитывается что оно живое.
Смысл сего в том, что если второе приложение долго не отвечает, первое его грохает и запускает снова.
1) Первое приложение ищет хендл главной формы второго приложения и шлет ему сообщение:
Проблема: первое приложение не получает ответное сообщение.
Я убедился что хендл первого находится правильно, внутри второго сообщения также принимается правильный хендл первого приложения, но второе упорно не видит это сообщение.
Что я делаю не так? Возможно я чего-то не знаю, чего именно?
Здравствуйте, Danchik, Вы писали:
D>Вы не слышали об Мютексах? CreateMutex D>Создаем именованый мютекс, и если второе приложение его не дергает: оно не запущено-свалилось-зависло.
Тогда уж лучше ждать на хэндле процесса: когда процесс завершается, его хэндл переходит в сигнальное состояние и
wait-функция возвращается с кодом WAIT_OBJECT_0.
По теме: оконные сообщения по разным причинам могут не проходить. Например, если у sender-а
более низкий integrity level, чем у receiver-а (Vista+), тогда доставка блокируется UAC-ом.
Или если процессы запущены на разных десктопах/оконных станциях/сессиях, эти границы оконные
сообщения тоже пересекать не могут.
Applications that need to communicate using HWND_BROADCAST should use the RegisterWindowMessage function to obtain a unique message for inter-application communication.
The system only does marshalling for system messages (those in the range 0 to (WM_USER-1)). To send other messages (those >= WM_USER) to another process, you must do custom marshalling.
Здравствуйте, RSATom, Вы писали:
Оопс, автор оказывается девушка... Примите мои извинения за грубость... Девушек так мало в наших рядах... Их ценить надо.
Здравствуйте, okman, Вы писали:
O>Здравствуйте, Danchik, Вы писали:
D>>Вы не слышали об Мютексах? CreateMutex D>>Создаем именованый мютекс, и если второе приложение его не дергает: оно не запущено-свалилось-зависло.
O>Тогда уж лучше ждать на хэндле процесса: когда процесс завершается, его хэндл переходит в сигнальное состояние и O>wait-функция возвращается с кодом WAIT_OBJECT_0.
Здравствуйте, RSATom, Вы писали:
RSA>Applications that need to communicate using HWND_BROADCAST should use the RegisterWindowMessage function to obtain a unique message for inter-application communication.
Здравствуйте, barbanel, Вы писали:
B>Здравствуйте уважаемые! B>Не работает SendMessage.
B>Знаю что тема обсосана уже миллион раз, но уже второй день не могу найти причину. B>Есть два разных приложения, одно из них шлет т.н. ping-сообщения второму, второе отчитывается что оно живое. B>Смысл сего в том, что если второе приложение долго не отвечает, первое его грохает и запускает снова.
Может, я уже подзабыл специфику обмена сообщениями именно между разными процессами, но: мне кажется, что приложения должны делать PostMessage, а не SendMessage. Т.к. SendMessage не вернёт управление до тех пор, пока не будет отработан на принимающей стороне, получается блокировка:
1) посылаем сообщение из приложения А, ждём ответа...
2) принимаем запрос в приложении Б, отвечаем другим сообщением, ждём ответа... (но приложение А занято тем, что ждёт ответа на первый SendMessage, упс)
Поэтому, либо пользуйтесь для ответа LRESULT (тогда надобность в ответном SendMessage исчезает), либо делайте асинхронное общение через PostMessage