![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 окна в качестве параметра....