Форум: "WinAPI";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
ВнизРеально ли узнать 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.059 c