Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/35: Рейтинг темы: голосов - 35, средняя оценка - 4.83
14 / 14 / 4
Регистрация: 10.07.2010
Сообщений: 130

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

05.07.2011, 22:14. Показов 7163. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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);
}
вот что-то типа такого, и в другом приложении (на базе диалога) обработать это сообщение, как это можно сделать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.07.2011, 22:14
Ответы с готовыми решениями:

Как посылать сообщение другому приложению
Пожалуйста объясните технику или дайте ссылочку, задание следующее: Написать два консольных приложения (А и Б). Приложения А выполняет...

Как отослать текстовое сообщение другому приложению. .SendMessage. WM_COPYDATA. Delphi
Всем привет. Есть такая программа, отправляющая текстовое сообщение другой программе через sendmessage. Программа отправитель: ...

Послать сообщение приложению
Здравствуйте уважаемые форумчане! Мне необходимо корректно закрыть приложение. Почему-то в голову не приходит ничего, как кроме послания...

10
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
05.07.2011, 22:17
http://msdn.microsoft.com/en-u... s.85).aspx
1
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
05.07.2011, 22:21
Цитата Сообщение от 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.
1
14 / 14 / 4
Регистрация: 10.07.2010
Сообщений: 130
05.07.2011, 22:30  [ТС]
хм... но я так понимаю что отправляемое и получаемое сообщения должны быть идентичны? и если я обоим пропишу WM_USER+1, где гарантия что они будут одинаковы? или они всё же будут идентичны?

с хуками пока не разбирался, мб ещё будет что полегче, а то там шляпа какая-то
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
05.07.2011, 22:43
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
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
05.07.2011, 22:52
Управление калькулятором из другой программы

Добавлено через 1 минуту
Имитация клавишь в другом окне
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
05.07.2011, 23:14
kravam, имхо здесь вопрос несколько в другом: как осуществить взаимодействие двух программ написанных ТС.

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

посылка сообщения:
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 массива.
на самом деле всё немного сложнее, но мне не хочется лишнего писать, что не имеет отношения к данному вопросу.

ну вот и мне не понятно, как сделать что бы программа, которая получает сообщения, могла их как-то "фильтровать", т.е. что бы при получении определённого сообщения, она выполняла определённое действие, поэтому я и решил посылать ей свои сообщения. И вот вроде бы получилось, да вот чё-та фигня вместо строки приходит
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
05.07.2011, 23:32
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).
1
14 / 14 / 4
Регистрация: 10.07.2010
Сообщений: 130
05.07.2011, 23:45  [ТС]
Цитата Сообщение от 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).
во, по-моему то что надо спасибо )))
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
05.07.2011, 23:47
Цитата Сообщение от Xtir Посмотреть сообщение
допустим сначала программа должна отправить другой программе размер массива, та его запишет в свою некую переменную.
потом она будет посылать какие-то строки, другая в свою очередь должна по очереди их записывать в 2 массива.
Я бы через файлы отправлял. Первая программа пишет файл, вторая его цилически читает. Так, первая закончила писать, вторая прочла, при необходимости удалила. И так далее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.07.2011, 23:47
Помогаю со студенческими работами здесь

Послать сообщение другому пользователю в системе
Не получается отправить сообщение. выдает синтаксис функции write username . как добавить к write имя пользователя и терминал? #include...

Отправить сообщение другому приложению (закрыть его)
Задача - получить хендл программы которую запускаешь и в нужный момент ее закрыть. я запускаю приложение командой param1 :=...

Отправка запросов другому приложению.ГЕТ, или как?
Всем привет ув.Программисты) Собственно пишу приложение которое будет находится у конечного пользователя. Точнее на ПК в офисе Само...

Как отправить из одного приложения другому приложению широковещательное намерение?
Имеется приложение 1, на котором размещен приемник. Также имеется приложение 2, которое хочет запустить приемник из приложения 1. Как это...

Послать нажатие клавиш неактивному приложению
Знаю можно послать нажатие клавиш активному приложению через System.Windows.Forms.SendKeys(...) А можно как-то послать неактивному? ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru