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

Вниз

app handle iz dll   Найти похожие ветки 

 
mvb   (2002-05-27 02:47) [0]

Извините, если вопрос повторяется, я не увидел его в форуме. Как из dll получить handle гл.окна процесса ?


 
Walker ©   (2002-05-27 03:01) [1]

можно разными способами...
например если известен заголовок окна - с помощью FindWindow

но по-моему лучше так:
в длл-ке создаётся функция, типа InitDLL(var wnd: HWND);
и при загрузке этой длл-ки из программы вызвать эту функцию, и передать handle окна в качестве параметра....


 
mvb   (2002-05-27 03:04) [2]

да я так и делал раньше, пока число приложений не стало > 10 и число dll то же. Проблема - засунуть этот handle в application.handle dll, чтобы в taskbare не было доп.окон.


 
mvb   (2002-05-27 03:05) [3]

PostQuitMessage ведь работает именно с гл.окном процесса. Вот и мне бы так же


 
Walker ©   (2002-05-27 03:22) [4]

что-то не совсем понял в чём проблема.

гапиши подробнее (и кратко) что за программа и что за длл-ка. и зачем такое разделение


 
mvb   (2002-05-27 03:27) [5]

раньше при загрузке dll вызывал экспортируемую ф-ю SetAppHandle и передавал в dll application.handle (гл.окно) приложения, а в dll присваивал полученный handle соответственно в application.handle. Модуль-то другой. И при засветке форм в dll не появляется доп.иконки в taskbar. Но приложений много, библиотек тоже. Хочется обойтись без написания экспортируемой ф-и в dll и без вызова ее из приложения. Короче, хочется определить гл.окно приложения чисто из dll.


 
Walker ©   (2002-05-27 04:40) [6]

ну всё-равно длл-ка - это не самостоятельная программа, это набор функций... в длл-ке есть только часть инициализации.

если программ несколько а длл-ка должна выбрать какую-то одну - хм... придумай своё сообщение, некий код, например

const
WM_MYDLLASK = WM_USER + 1;

и далее твоя длл-ка будет искать все окна, у которых определённый заголовок (FindWindow, GetNextWindow, GetTopWindow - сам посмотришь что лучше)

найдя одно из "твоих" окон - посылает сообщение WM_MYDLLASK,
а твоя программа возращаят свой Application.Handle

таким образом длл-ка может хранить целый список твоих окон


 
Walker ©   (2002-05-27 05:01) [7]

да, кстати.... функции типа FindWindow возвращают Handle найденного окна.

При запуска программы, можно (в .dpr файле) перед Application.Run или перед Application.Initialize поставить

Application.Title:="MyApp";

и тогда вообще всё просто:
FindWindow(nil, "MyApp") возвращает нужный Handle.

если же Title меняется в ходе выполнения программы,
тогда просто просмотреть ВСЕ окна, и каждому послать сообщение
(типа SendMessage(WM_MYDLLASK, ...)).


 
mvb   (2002-05-27 05:22) [8]

это все правильно, но это вариации на тему: "exe-файл знает, что какие-то длл хотят получить H его гл.окна". Независимость модулей и пр. Т.е. я пишу кучу COM-серверов, которые м.б. загружены кем угодно (любой программист со своими программами как клиент).


 
Walker ©   (2002-05-27 05:48) [9]

ну.... напиши в документации к своей длл-ке, что клиент должен использовать особую функцию инициализации.

а так - наврядли.
(Валкер просит прощения за свою непонятливость и надежду, что его мысли окажутся полезными.... короче за пустую трату времени)


 
mvb   (2002-05-27 05:51) [10]

все равно спасибо



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

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

Наверх




Память: 0.49 MB
Время: 0.015 c
8-18066
KaPaT
2002-01-21 10:51
2002.06.06
Непроходит jpg : TJpegImage


6-18079
DikobraZ
2002-03-25 19:13
2002.06.06
Сокеты


1-17978
Stanbab
2002-05-28 11:38
2002.06.06
Форма в пакете


1-17929
начинающий програмер
2002-05-27 12:57
2002.06.06
dll


14-18139
LP
2002-05-03 10:08
2002.06.06
Компонент TChart