Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

app handle iz dll


mvb ©   (2002-05-27 02:47:00) 

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


mvb   (2002-05-27 05:51:00) [1]

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


Walker   (2002-05-27 05:48:00) [2]

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

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


mvb   (2002-05-27 05:22:00) [3]

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


Walker   (2002-05-27 05:01:00) [4]

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

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

Application.Title:="MyApp";

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

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


Walker   (2002-05-27 04:40:00) [5]

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

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

const
WM_MYDLLASK = WM_USER + 1;

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

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

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


mvb   (2002-05-27 03:27:00) [6]

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


Walker   (2002-05-27 03:22:00) [7]

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

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


mvb   (2002-05-27 03:05:00) [8]

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


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

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


Walker   (2002-05-27 03:01:00) [10]

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо