Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2010, 13:25   #1
HollyPaladin
Пользователь
 
Аватар для HollyPaladin
 
Регистрация: 29.11.2009
Сообщений: 51
По умолчанию Вопрос про dll и сообщения

Добрый день.
Я написал функцию и поместил ее в dll. Эта dll должна загружаться из основной программы.Во время работы функция отправляет сообщения программе, номера сообщений следующие :
8 - начало работы функции(посылается 1 раз),
9 - работа функции(посылается много раз),
10 - работа функции окончена(посылается 1 раз).
Для отправки сообщения из dll я использовал функцию PostMessage,основная программа принимает их с помощью функции GetMessage.
Второй параметр функции GetMessage - HWND окна,сообщения которого нужно обрабатывать,если этот параметр NULL то будут обрабатываться сообщения всех окон. Третий и четвертый параметры функции указывают
минимальное и максимальное значение принимаемого сообщения.
Я бы хотел сделать чтобы основная программа принимала сообщения с номерами 8 ,9 , 10 только от функции из моей dll, но для этого нужно HWND, а его у dll на сколько я знаю нет,если я не прав поправьте меня.
Вопрос в следующем:
Как сделать чтобы основная программа принимала сообщения с номерами 8 ,9 , 10 только от моей dll?







Код:
BOOL GetMessage
(
	LPMSG lpMsg, // указатель на структуру
	HWND hWnd, // указатель окна чьи сообщения нужно обрабатывать,если установить это значение в NULL, то будут приниматься все сообщения
	UINT wMsgFilterMin, // номер мимимального сообщения для выборки
	UINT wMsgFilterMax // номер максимального сообщения для выборки
);

Последний раз редактировалось HollyPaladin; 19.10.2010 в 15:38.
HollyPaladin вне форума Ответить с цитированием
Старый 19.10.2010, 19:55   #2
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

изобретать велосипед не нужно - есть же стандартный цикл опроса входящих сообщений
dll должна узнать хендл окна - способов это сделать гораздо больше одного и передавать сообщение непосредственно ему, а не окно принимать сообщения и думать длл его отправило или нет
Нет, ну правда..

Последний раз редактировалось yuran666666; 19.10.2010 в 19:59.
yuran666666 вне форума Ответить с цитированием
Старый 20.10.2010, 14:57   #3
HollyPaladin
Пользователь
 
Аватар для HollyPaladin
 
Регистрация: 29.11.2009
Сообщений: 51
По умолчанию

yuran666666,функция из dll знает хэндл окна основной программы и посылает сообщения именно ему, но если не проверять в основной программе откуда пришло сообщение то может например произорйти такая ситуация: функция из dll еще не закончила работу и посылает основной программе сообщения с номером 9, а в этот момент основная программа примет сообщение с номером 10 (работа функции окончена) не от моей dll , в результате программа подумает что функция из dll окончила работу а это не так.
HollyPaladin вне форума Ответить с цитированием
Старый 20.10.2010, 15:06   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а оно кому то надо вашему окну посылать левые сообщения?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.10.2010, 15:55   #5
HollyPaladin
Пользователь
 
Аватар для HollyPaladin
 
Регистрация: 29.11.2009
Сообщений: 51
По умолчанию

Пепел Феникса, этого я не знаю, я написал только dll , основная программа написана не мной, знаю что таких dll как моя основная программа использует множество и какие сообщения она посылает и принимает и когда я не знаю, знаю только что моя отправляет сообщения с тремя разными номерами а основная программа принимает их, по этому и хотел подстраховаться чтобы сообщения наверняка принимались от моей dll.
HollyPaladin вне форума Ответить с цитированием
Старый 20.10.2010, 16:03   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

так если основная программа написана не вами то зачем вообще в нее лезть?
вообще поидее у сообщения два параметра один надо делать как идентификатор ДЛЛ тогда.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.10.2010, 16:50   #7
HollyPaladin
Пользователь
 
Аватар для HollyPaladin
 
Регистрация: 29.11.2009
Сообщений: 51
По умолчанию

Пепел Феникса, полез потомучто у меня небольшой опыт работы с сообщениями и не хотелось бы чтобы из-за неправильной передачи сообщений потом возникли проблемы в работе программы и пришлось бы что-нибудь переделывать.
Спасибо за исчерпывающий ответ.
HollyPaladin вне форума Ответить с цитированием
Старый 21.10.2010, 11:12   #8
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Цитата:
Сообщение от HollyPaladin Посмотреть сообщение
yuran666666,функция из dll знает хэндл окна основной программы и посылает сообщения именно ему, но если не проверять в основной программе откуда пришло сообщение то может например произорйти такая ситуация: функция из dll еще не закончила работу и посылает основной программе сообщения с номером 9, а в этот момент основная программа примет сообщение с номером 10 (работа функции окончена) не от моей dll , в результате программа подумает что функция из dll окончила работу а это не так.
HWND
A handle to the window whose messages are to be retrieved. The window must belong to the current thread.

так что не думайте, что стандартная процедура обработки сообщений окну:

Код:
.WHILE TRUE
   invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
   invoke TranslateMessage, ADDR msg
   invoke DispatchMessage, ADDR msg
.ENDW
будет получать сообщения от венды посланные квипом файрфоксу.
DispatchMessage передаст это ваше сообщение присланное окну в процедуру обработки сообщений (она определяется при создании окна). Сообщения с номерами 8 ,9 ,10(скорее всего прописываются в параметре WPARAM или LPARAM структуры MSG) если они обрабатываются приложением, будут обрабатываться этой процедурой независимо от того откуда они пришли от вашей длл, от чужой или вообще от квыпа с файрфоксом
Если хотите более исчерпывающий ответ, то нужно хотябы показать что это за приложение (если конечно оно не сотни мб весит)
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 21.10.2010, 11:30   #9
HollyPaladin
Пользователь
 
Аватар для HollyPaladin
 
Регистрация: 29.11.2009
Сообщений: 51
По умолчанию

yuran666666,я уже разобрался.
Спасибо всем кто отписался в теме.
HollyPaladin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про классы в DLL. Вадим Буренков Общие вопросы Delphi 15 14.09.2009 18:36
Вопрос про DLL R@# Общие вопросы Delphi 11 21.06.2009 12:26
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
Передача сообщения из программы в свою Dll SergeySK Общие вопросы Delphi 3 01.11.2007 14:42
Вопрос про DLL-файлы PChEL@ Общие вопросы Delphi 3 29.06.2007 02:03