Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
4-1106820066
lehich
2005-01-27 13:01
2005.03.06
ограничение на передачу данных в WORD???


14-1108029717
DVM
2005-02-10 13:01
2005.03.06
Черкизовский рынок горит. Пламя до 5 этажа.


1-1109082760
HydraMarat
2005-02-22 17:32
2005.03.06
Как выделить область в стеке?


1-1108815635
TUser
2005-02-19 15:20
2005.03.06
Быстрая сортировка


1-1108739359
DimonNew
2005-02-18 18:09
2005.03.06
Как можно связать обычные компонеты с наборами данных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский