HWND_BROADCAST - обмен данными между приложениями

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

HWND_BROADCAST - обмен данными между приложениями

Сообщение Alexanbar » 06.06.2005 (Пн) 23:40

Нужно сделать обмен пользовательскими сообщениями между несколькими приложениями. Вроде бы для рассылки сообщений всем желающим нужно в ф-ях SendMessage и PostMessage вместо HWND указать HWND_BROADCAST. Насчёт RegisterWindowMessage - в курсе.

В MSDN сказано, что рассылка идёт ОКНАМ ВЕРХНЕГО УРОВНЯ. А вот интересно, форма является окном верхнего уровня?

Если вместо HWND_BROADCAST указать hwnd окна, сообщение для формы приходит, а через HWND_BROADCAST - нет. Как же всё-таки эти сообщения отловить?

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 07.06.2005 (Вт) 7:42

А если отсылать с помощью BroadcastSystemMessage, то самое, или это не то?
الفيجوال بيسك الرابح

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 07.06.2005 (Вт) 8:00

Вообще окно «родитель» является оком верхнего уровня для своего «ребенка» (сравнивая mdi – родителем будет главное, детьми все подчиненные)... В данном случае, думаю что сообщения будут гулять только между родителями и детьми только данного окна...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.06.2005 (Вт) 11:12

HWND_BROADCAST объявлена как?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 07.06.2005 (Вт) 14:07

GSerg писал(а):HWND_BROADCAST объявлена как?


В модуле :

Public Const HWND_BROADCAST = &HFFFF&



Там же:


Public Declare Function RegisterWindowMessage Lib "user32" Alias "RegisterWindowMessageA" (ByVal lpString As String) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
'Public Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Public Declare Function PostMessageByString Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long


Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Any) As Long 'ByVal dwNewLong As Long) As Long
Public Const GWL_WNDPROC = (-4)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.06.2005 (Вт) 14:14

Alexanbar, выходит форма - не окно верхнего уровня.
У неё есть невидимый родитель с классом ThunderRT6Main
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.06.2005 (Вт) 14:28

Странные вещи ты говоришь, Тёмыч...
Во-первых, форма является окном верхнего уровня. Во-вторых, всё прекрасно приходит. Spy++ регистрирует, во всяком случае.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.06.2005 (Вт) 14:38

Но невидимый родитель у неё всё равно есть! :twisted:
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.06.2005 (Вт) 14:47

Родитель с точки зрения COM - возможно, тебе лучше знать :)
Но родителя с точки зрения иерархии окон у неё нет :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.06.2005 (Вт) 14:55

Есть, Desktop :)
Lasciate ogni speranza, voi ch'entrate.

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Re: HWND_BROADCAST

Сообщение codemaster » 07.06.2005 (Вт) 15:30

Alexanbar писал(а):Нужно сделать обмен пользовательскими сообщениями между несколькими приложениями. Вроде бы для рассылки сообщений всем желающим нужно в ф-ях SendMessage и PostMessage вместо HWND указать HWND_BROADCAST. Насчёт RegisterWindowMessage - в курсе.


Пещерный век! Есть много других вариантов обмена данными между приложениями. (см MSDN)

P.S. В памяти всплыл случай как один индус лихо реализовал "маршалинг" по индуски
через BROADCAST :wink:
//<-
Mit freundlichen Grüßen
//->

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.06.2005 (Вт) 15:33

GSerg писал(а):Родитель с точки зрения COM - возможно, тебе лучше знать :)
Но родителя с точки зрения иерархии окон у неё нет :)

Именно с точки зрения иерархии окон. Я смотрел тем же spyxx-ом.
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.06.2005 (Вт) 15:40

Ты, случаем, смотрел не юзерформу экселевую? Потому что у меня ThunderFormDC верхнего уровня (из-под IDE) или ThunderRT6FormDC верхнего уровня (exe).
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.06.2005 (Вт) 15:51

Всё, всем сорри, я проглючил. Это я на owner-а посмотрел :oops:
Изображение

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Re: HWND_BROADCAST

Сообщение Alexanbar » 07.06.2005 (Вт) 17:53

codemaster писал(а):Пещерный век! Есть много других вариантов обмена данными между приложениями. (см MSDN)



Рассказал бы пещерному человеку, что это за способами.

Чую, что хочешь намекнуть на Winsock. Но, насколько я понимаю, пержполагается, что выбраны 2 порта длЯ связи. А откуда приложения узнают, какие порты брать? Опять же нужно не между двумя, а нескольким.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: HWND_BROADCAST

Сообщение tyomitch » 07.06.2005 (Вт) 17:59

Alexanbar писал(а):
codemaster писал(а):Пещерный век! Есть много других вариантов обмена данными между приложениями. (см MSDN)



Рассказал бы пещерному человеку, что это за способами.

Пайпы, мэйлслоты, файл-маппинги, и другие тыщу раз сказанные слова.
Изображение

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 07.06.2005 (Вт) 20:55

Дело осталось за малым - узнать, с чем едят эти
Пайпы, мэйлслоты, файл-маппинги

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 09.06.2005 (Чт) 0:09

С MSDN-ом вприглядку ;-)


Нет, серьёзно. Что за задача (как можно детальнее)?
Изображение

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 09.06.2005 (Чт) 0:15

Нашёл интересный сабж :
http://www.vbnet.ru/forum/show.aspx?id=66035&page=2

Буду искать пример на счёт NET DDE :roll:

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 09.06.2005 (Чт) 0:39

ALX_2002 писал(а):Нашёл интересный сабж :
http://www.vbnet.ru/forum/show.aspx?id=66035&page=2

Там гон. У каждого экземпляра ActiveX-компонента собственная копия всех глобальных переменных.
Изображение

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 09.06.2005 (Чт) 0:59

2 tyomitch: Цитата: "Ну чё ж ты.... злобный такой.... Дети будут смотреть на тебя !!! И УЖАСАТЬСЯ..."

Срубил светлую детскую мечту на корню :lol: :lol:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.06.2005 (Чт) 16:35

Дык кто, если не мы? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 09.06.2005 (Чт) 22:04

tyomitch писал(а):С MSDN-ом вприглядку ;-)


Нет, серьёзно. Что за задача (как можно детальнее)?


Вот пример. Есть у меня сейчас форма с webbroser-ом.

На панели инструментов есть кнопочка "Создать ссылку (*.url) на отображаемую страницу". В результате после создания ярлыка в основной форме нужно сделать перенавигацию списка файлов, найти свежесозданный ярлык, и сделать его Listview1.Selecteditem.

В рамках одного приложения это всё работает, но мне нужен webbrowser как отдельное приложение, но с сохранением прежнего взаимодействия между формами (которые теперь планируется разделить между двумя приложениями).

Аналогичный поиск свежесозданных объектов (не только файловых!) есть и в других местах. Формат передаваемых данных находится в стадии разработки.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 09.06.2005 (Чт) 22:42

Ты ведь знаешь hWnd окна-приёмника, так?
Если да, то легче всего послать ему WM_COPYDATA
Изображение

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 09.06.2005 (Чт) 23:41

Нет. В том -то вся и штука, чтобы hwnd не знать заранее. Пока webbrowser и главная форма находятся в рамках одного приложения. webbrowser запускается только из главной формы.

Теперь нужно webbrowser запускать и из абслютно другого приложения (адресной книги). Если главное приложение запущено, в нём нужно найти новый ярлык, например так:

Адресная книга--> webbrowser-->поиск ярлыка в главном приложении (если оно есть)

или

главное приложение -->webbrowser-->главное приложение ((поиск нового ярлыка)

А сейчас пока так:

Form1-->frmWebbrowser-->Form1(поиск нового ярлыка)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 10.06.2005 (Пт) 10:30

Alexanbar писал(а):Нет. В том -то вся и штука, чтобы hwnd не знать заранее.

Ок. Предлагаю именованную трубу (совместимость: только WinNT), устраивает? Если нет, ещё что-нибудь предложу :-)
Изображение

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 10.06.2005 (Пт) 12:43

Хотелось бы и w98

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.06.2005 (Пт) 15:04

DDE? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 10.06.2005 (Пт) 15:09

GSerg
Ну способы разные нужны, способы разные важны :D
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 13.06.2005 (Пн) 20:31

Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 187

    TopList