Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.06;
Скачать: CL | DM;

Вниз

Реально ли узнать Handle главного окна приложения, вызвавшего   Найти похожие ветки 

 
Cosinus ©   (2005-01-20 10:26) [0]

некоторую функцию из Dll, из самой Dll? И если да, то как?


 
BiN ©   (2005-01-20 10:29) [1]

У приложения нет главного окна


 
Cosinus ©   (2005-01-20 15:01) [2]


> BiN ©   (20.01.05 10:29) [1]

Простите за путанницу в терминологии. Но вы же поняли что я хотел спросить? Если нет, попробую объяснить. Есть приложение. Есть единственная avtocreate форма Main_fm:TMain_fm. Из нее вызываются некоторые функции из dll. При определенных условиях Dll шлет этому окну приложения сообщение. Так вот меня интересует реально ли в библиотеке определить, откуда она была вызвана или придется делать что то наподобие этого MHND:=FindWindow("TMain_fm","Main");
if MHND<>0 then PostMessage()....

Дело в том, что видимо эту библиотеку я буду использовать не раз, и не хотелось бы каждый раз ее перекомпилировать под новое приложение.


 
BiN ©   (2005-01-20 15:16) [3]

А передавать хэндл целевого окна через параметр функции в длл не приходило в голову?


 
Digitman ©   (2005-01-20 15:17) [4]


> Есть единственная avtocreate форма Main_fm:TMain_fm


начнем с того, что окно этой формы - вовсе не единственное и вовсе не "главное" окно в приложении, создавшем эту форму.


 
Digitman ©   (2005-01-20 15:22) [5]


> Cosinus


и вообще - если не сделать опред.потуги к тому чтобы в системе всякий момент времени существовал лишь ОДИН экземпляр процесса твоего приложения, то вполне возможно существование более чем одного окна класса "TMain_fm" с именем"Main". И кому, спрашивается, будет адресовано твое сообщение ? Ответ : первому же найденному в системе окну с данныи атрибутами. Прочие окна с теми же атрибутами останутся ч.н. "с носом".

Вот теперь сиди и чеши репу, в тот ли огород ты полез ..


 
GuAV ©   (2005-01-20 15:25) [6]

А почему бы не просто не передать dll-ке хендл формы ? Или вернуть из dll указатель на глобальную переменную, которую заполнить хендлом формы ?


> форма Main_fm:TMain_fm. Из нее вызываются некоторые
> функции из dll.

Можно узнать ID процесса, найти в нём окно класса TApplication, и найти окна у которых owner = HWND TApplication - это и будут формы приложения.

Определить вызвана ли процедура из метода формы или нет в общем случае не представляется возможным.


 
Cosinus ©   (2005-01-20 16:57) [7]


> BiN ©   (20.01.05 15:16) [3]

Ступил. Сильно ступил. Так мне и надо. Спасибо.
> Digitman ©   (20.01.05 15:22) [5]
Потуги уже сделаны :)


 
Erik1 ©   (2005-01-20 17:42) [8]

Ну если поизнащатся то можно и стек вызово раскрутить. :)


 
Eraser ©   (2005-01-20 18:12) [9]

Cosinus ©
Давно проверенный вариант. Берёшь ID вызывающего потока и при инициализации dll передаёшь его ей. А потом для посылки сообщений используй SendThreadMessage. Проблемы могут возникнуть если в библиотеке используются хуки, или она исользуется другими процессами. Тут уж надо пренимать меры по разграничению памяти.



Страницы: 1 вся ветка

Текущий архив: 2005.03.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.055 c
14-1108378587
Ega23
2005-02-14 13:56
2005.03.06
Где фотки можно выложить?


3-1107705851
Asail
2005-02-06 19:04
2005.03.06
Вопрос по DBGridEh...?


3-1107446707
fess
2005-02-03 19:05
2005.03.06
blob -> Query


10-1085145715
Homyak_Max
2004-05-21 17:21
2005.03.06
Проверка соединения с клиентом


4-1106075993
serko
2005-01-18 22:19
2005.03.06
Сворачивание в Tray при старте проги.