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

Как послать своё сообщение другому приложению? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.84
Xtir
11 / 11 / 0
Регистрация: 10.07.2010
Сообщений: 130
05.07.2011, 22:14     Как послать своё сообщение другому приложению? #1
C++
1
2
3
4
5
6
7
8
9
#define WM_MYMESSAGE        2000
 
void main()
{
    HWND hWnd;
    hWnd = ::FindWindow(NULL,"MyApp");
 
    ::SendMessage(hWnd,WM_MYMESSAGE,0,0);
}
вот что-то типа такого, и в другом приложении (на базе диалога) обработать это сообщение, как это можно сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2011, 22:14     Как послать своё сообщение другому приложению?
Посмотрите здесь:

C++ Как передавать аргументы консольному приложению в Debug?
Как послать сообщение по асе? C++
C++ Как послать сообщение WM_Какое-то иконке в трее ?
C++ Как послать запрос и прочитать по HTTP
Как подключить пользовательскую DLL к приложению C++
C++ Как передать пути в качестве аргументов приложению?
Послать сообщение exe-шнику и получить ответ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6545 / 3965 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.07.2011, 22:17     Как послать своё сообщение другому приложению? #2
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
schdub
 Аватар для schdub
2907 / 1251 / 224
Регистрация: 19.01.2009
Сообщений: 3,239
Завершенные тесты: 1
05.07.2011, 22:21     Как послать своё сообщение другому приложению? #3
Цитата Сообщение от Xtir Посмотреть сообщение
#define WM_MYMESSAGE 2000
значение WM_MYMESSAGE должно быть в [WM_USER; 0x7FFF]
0 through WM_USER - 1 Messages reserved for use by Windows.
WM_USER through 0x7FFF Integer messages for use by private window classes.
0x8000 through 0xBFFF Messages reserved for future use by Windows.
0xC000 through 0xFFFF String messages for use by applications.
Greater than 0xFFFF Reserved by Windows for future use.
Xtir
11 / 11 / 0
Регистрация: 10.07.2010
Сообщений: 130
05.07.2011, 22:30  [ТС]     Как послать своё сообщение другому приложению? #4
хм... но я так понимаю что отправляемое и получаемое сообщения должны быть идентичны? и если я обоим пропишу WM_USER+1, где гарантия что они будут одинаковы? или они всё же будут идентичны?

с хуками пока не разбирался, мб ещё будет что полегче, а то там шляпа какая-то
schdub
 Аватар для schdub
2907 / 1251 / 224
Регистрация: 19.01.2009
Сообщений: 3,239
Завершенные тесты: 1
05.07.2011, 22:43     Как послать своё сообщение другому приложению? #5
WM_USER - это константа.

Еще взгляните на функцию RegisterWindowMessage():
The RegisterWindowMessage function defines a new window message that is guaranteed to be unique throughout the system. The returned message value can be used when calling the SendMessage or PostMessage function.

C
1
2
3
UINT RegisterWindowMessage(
    LPCTSTR lpString    // address of message string
   );

Parameters

lpString

Points to a null-terminated string that specifies the message to be registered.



Return Values

If the message is successfully registered, the return value is a message identifier in the range 0xC000 through 0xFFFF.
If the function fails, the return value is zero.

Remarks

The RegisterWindowMessage function is typically used to register messages for communicating between two cooperating applications.
If two different applications register the same message string, the applications return the same message value. The message remains registered until the Windows session ends.
Only use RegisterWindowMessage when more than one application must process the same message. For sending private messages within a window class, an application can use any integer in the range WM_USER through 0x7FFF. (Messages in this range are private to a window class, not to an application. For example, predefined control classes such as BUTTON, EDIT, LISTBOX, and COMBOBOX may use values in this range.)

See Also

PostAppMessage, PostMessage, SendMessage
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,298
05.07.2011, 22:52     Как послать своё сообщение другому приложению? #6
Управление калькулятором из другой программы

Добавлено через 1 минуту
Имитация клавишь в другом окне
schdub
 Аватар для schdub
2907 / 1251 / 224
Регистрация: 19.01.2009
Сообщений: 3,239
Завершенные тесты: 1
05.07.2011, 23:14     Как послать своё сообщение другому приложению? #7
kravam, имхо здесь вопрос несколько в другом: как осуществить взаимодействие двух программ написанных ТС.

Еще если необходимо осуществить простое взаимодействие, то можно использовать WM_COPYDATA
Если посложнее, то можно использовать PIPE или даже сокеты.
Xtir
11 / 11 / 0
Регистрация: 10.07.2010
Сообщений: 130
05.07.2011, 23:25  [ТС]     Как послать своё сообщение другому приложению? #8
хм, а вроде что-то получается, даже получилось (вроде) строку передать, вот тока строка почему-то приходит в виде каких-то символов

посылка сообщения:
C++
1
2
3
4
5
6
7
COPYDATASTRUCT cd;
char buffer[32];
strcpy(buffer,"1234");
cd.lpData = &buffer;
cd.cbData = sizeof(buffer);
 
::SendMessage(hWnd,WM_MYMESSAGE,0,(LPARAM)&cd);
получение сообщения:
C++
1
2
3
4
5
6
void CMyApp::OnMyMessage(CWnd* pWnd, COPYDATASTRUCT* pCD)
{
    char buffer[32];
    strcpy(buffer,(char*)pCD->lpData);
    MessageBox(buffer);
}
Добавлено через 9 минут
Цитата Сообщение от schdub Посмотреть сообщение
kravam, имхо здесь вопрос несколько в другом: как осуществить взаимодействие двух программ написанных ТС.

Еще если необходимо осуществить простое взаимодействие, то можно использовать WM_COPYDATA
Если посложнее, то можно использовать PIPE или даже сокеты.
не знаю насколько сложно реализовать то, что мне нужно, но надо сделать вот что:
допустим сначала программа должна отправить другой программе размер массива, та его запишет в свою некую переменную.
потом она будет посылать какие-то строки, другая в свою очередь должна по очереди их записывать в 2 массива.
на самом деле всё немного сложнее, но мне не хочется лишнего писать, что не имеет отношения к данному вопросу.

ну вот и мне не понятно, как сделать что бы программа, которая получает сообщения, могла их как-то "фильтровать", т.е. что бы при получении определённого сообщения, она выполняла определённое действие, поэтому я и решил посылать ей свои сообщения. И вот вроде бы получилось, да вот чё-та фигня вместо строки приходит
schdub
 Аватар для schdub
2907 / 1251 / 224
Регистрация: 19.01.2009
Сообщений: 3,239
Завершенные тесты: 1
05.07.2011, 23:32     Как послать своё сообщение другому приложению? #9
Xtir,
The data being passed must not contain pointers or other references to objects not accessible to the application receiving the data.

Добавлено через 6 минут
Цитата Сообщение от Xtir Посмотреть сообщение
могла их как-то "фильтровать"
обратите внимание на COPYDATASTRUCT::dwData - через этого мембера структуры, мы можем передавать, своего рода, код сообщения (Specifies up to 32 bits of data to be passed to the receiving application).
Xtir
11 / 11 / 0
Регистрация: 10.07.2010
Сообщений: 130
05.07.2011, 23:45  [ТС]     Как послать своё сообщение другому приложению? #10
Цитата Сообщение от schdub Посмотреть сообщение
Xtir,
The data being passed must not contain pointers or other references to objects not accessible to the application receiving the data.

Добавлено через 6 минут

обратите внимание на COPYDATASTRUCT::dwData - через этого мембера структуры, мы можем передавать, своего рода, код сообщения (Specifies up to 32 bits of data to be passed to the receiving application).
во, по-моему то что надо спасибо )))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2011, 23:47     Как послать своё сообщение другому приложению?
Еще ссылки по теме:

C++ Послать сообщение окну в указанный момент времени
Как послать аналоговый звук в порт? C++
C++ Каким аспектам программирования стоит посвятить своё внимание? Как правильно подойти к обучению?
Как привязать к консольному приложению иконку? C++

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

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,298
05.07.2011, 23:47     Как послать своё сообщение другому приложению? #11
Цитата Сообщение от Xtir Посмотреть сообщение
допустим сначала программа должна отправить другой программе размер массива, та его запишет в свою некую переменную.
потом она будет посылать какие-то строки, другая в свою очередь должна по очереди их записывать в 2 массива.
Я бы через файлы отправлял. Первая программа пишет файл, вторая его цилически читает. Так, первая закончила писать, вторая прочла, при необходимости удалила. И так далее.
Yandex
Объявления
05.07.2011, 23:47     Как послать своё сообщение другому приложению?
Ответ Создать тему
Опции темы

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