Форум программистов, компьютерный форум CyberForum.ru

Сообщения между win32 приложениями - C++

Восстановить пароль Регистрация
 
myxasa
14 / 14 / 1
Регистрация: 31.05.2012
Сообщений: 210
Записей в блоге: 2
17.08.2013, 21:10     Сообщения между win32 приложениями #1
Как отправить сообщение (аналог системных типа WM_DESTROY только свои) и обработать приемником? приёмник это обычное консольное win32 приложение(когда в визуале пустой проект win32 создаешь)
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6545 / 3965 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.08.2013, 21:12     Сообщения между win32 приложениями #2
консольным приложением - никак
myxasa
14 / 14 / 1
Регистрация: 31.05.2012
Сообщений: 210
Записей в блоге: 2
17.08.2013, 21:13  [ТС]     Сообщения между win32 приложениями #3
только с использованием окон winapi ?
Jupiter
Каратель
Эксперт C++
6545 / 3965 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.08.2013, 21:24     Сообщения между win32 приложениями #4
можно и без окнон, но только с винАпи
DU
1478 / 1054 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
17.08.2013, 21:25     Сообщения между win32 приложениями #5
можете попробовать в своем консольном приложении написать ченить такое:
C++
1
2
3
4
5
6
7
    MSG msg = {0};
    while (::GetMessage(&msg, NULL, 0, 0))
    {
      // тут какая-то обработка
      ::DispatchMessage(&msg);
      // или тут. пробовать надо
    }
и если в приложении, которое должно посылать сообщения консольному приложению известен поток, в котором выполняется приведенный код, то можно послать сообщение вызовом PostThreadMessage
castaway
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,056
Записей в блоге: 10
Завершенные тесты: 1
17.08.2013, 21:29     Сообщения между win32 приложениями #6
Цитата Сообщение от Jupiter Посмотреть сообщение
консольным приложением - никак
Это звучит непривычно, но так можно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <windows.h>
 
VOID CALLBACK my_timer( HWND, UINT, UINT_PTR, DWORD ) {
    PostQuitMessage( 0 );
}
 
int main()
{
    SetTimer( NULL, 1, 2000 /* 2 seconds */, my_timer );
 
    MSG msg;
    while ( GetMessage( &msg, NULL, 0, 0 ) ) {
        TranslateMessage( &msg );
        DispatchMessage( &msg );
    }
 
    return 0;
}
Jupiter
Каратель
Эксперт C++
6545 / 3965 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.08.2013, 21:33     Сообщения между win32 приложениями #7
castaway, не вижу причин чтоб таймер не работал, а поймать WM_CREATE ?)
castaway
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,056
Записей в блоге: 10
Завершенные тесты: 1
17.08.2013, 21:36     Сообщения между win32 приложениями #8
Цитата Сообщение от Jupiter Посмотреть сообщение
castaway, не вижу причит чтоб таймер не работал, а поймать WM_CREATE ?)
Тут суть не в таймере. Суть в том что можно поймать пользовательское сообщение (WM_USER + X).
WM_CREATE ? Окна же нет С другой стороны что мешает другому приложению послать моему приложению сообщение WM_CREATE !? Правильно. Ничего не мешает
Убежденный
Системный программист
 Аватар для Убежденный
14445 / 6429 / 1015
Регистрация: 02.05.2013
Сообщений: 10,670
Завершенные тесты: 1
17.08.2013, 21:37     Сообщения между win32 приложениями #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Передавать оконные сообщения между процессами - это, как минимум, ненадежно.
Сообщения не могут пересекать границы рабочих столов (не говоря уже про
оконные станции и пользовательские сессии), да и в пределах одного рабочего
стола доставка сообщений между процессами, выполняющимися в разных
контекстах безопасности, блокируется UAC (точнее говоря, UIPI).

Намного более надежно использовать события, например.
DU
1478 / 1054 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
17.08.2013, 21:45     Сообщения между win32 приложениями #10
через евенты не передашь информацию. только факт того, что что-то случилось. да и то, в случае, когда нужно обрабатывать больше одного факта, хрень какая-то выйдет. если уж потребовалось межпроцессное взаимодействие, то и смотреть нужно соответствующие либы ну или велосипед какой-нибудь писать. вот тут кое-какие варианты перечислены:
http://ru.wikipedia.org/wiki/%D0%9C%...B2%D0%B8%D0%B5
Убежденный
Системный программист
 Аватар для Убежденный
14445 / 6429 / 1015
Регистрация: 02.05.2013
Сообщений: 10,670
Завершенные тесты: 1
17.08.2013, 21:52     Сообщения между win32 приложениями #11
Цитата Сообщение от DU Посмотреть сообщение
через евенты не передашь информацию. только факт того, что что-то случилось. да и то, в случае, когда нужно обрабатывать больше одного факта, хрень какая-то выйдет.
Намного более надежно использовать события, например.
DU
1478 / 1054 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
17.08.2013, 22:28     Сообщения между win32 приложениями #12
ваш евент - это объект синхронизации. как мне только с его помощью передать другому процессу пару килобайт каких-нибудь данных? енкодить их в имя евента предлагать не надо.
Убежденный
Системный программист
 Аватар для Убежденный
14445 / 6429 / 1015
Регистрация: 02.05.2013
Сообщений: 10,670
Завершенные тесты: 1
17.08.2013, 22:32     Сообщения между win32 приложениями #13
Не настаиваю. Выделил жирным (см. выше).
Кроме событий, есть ведь разделяемая память, каналы, COM/RPC ну и дальше по списку.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2013, 22:32     Сообщения между win32 приложениями
Еще ссылки по теме:

Win32 или QT C++
Есть ли стандартная функция, запускающая указанный файл с приложениями по умолчанию? C++
Кириллица WIN32 CA C++
C++ Распространение данных между приложениями с использованием DLL
Пронумеровать очерёдность каждого сообщения так, чтобы нумерация очерёдности печаталась напротив сообщения C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,056
Записей в блоге: 10
Завершенные тесты: 1
17.08.2013, 22:32     Сообщения между win32 приложениями #14
Я думаю все согласятся с тем, что логично использовать специально созданные для этого функции. Это называется Interprocess Communications.
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Yandex
Объявления
17.08.2013, 22:32     Сообщения между win32 приложениями
Ответ Создать тему
Опции темы

Текущее время: 01:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru