![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Dem_max |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
ИМЕЕМ:
1. Имеется код для EXE. 2. При запуске EXE запускается окно приложения с параметром SW_HIDE и сразу сворачивается в трей. 3. Имеются 2 проекта (DLL и EXE) которые используют один и тот же код EXE (совместное использование одних и тех же файлов).Это нужно чтобы ошибки и исправления сразу изменялись в 2 проетах, без всяких там копирований файлов и вставок кода Ctrl+V. 4. Приложение использует системный трей. 5. в EXE обязательно присутствует манифест XP, который делает интерфейс программы правильным. НУЖНО: Нужно создать плагин в виде DLL на основе кода от EXE. Функция DLL по инициализации плагина должна запускать код от EXE в основном процессе DLL, а не отдельный файл EXE !!! И при выгрузке DLL код от EXE должен тоже выгружаться. Пока работает основная программа загрузившая плагин - DLL, код от EXE работает и отображает свое состояние в трее, как только основная программа вызвавшая плагин закрывается все выгружается. собственно попробовал таким способом все реализовать код DLL (код привел упрощенный):
в общем то так то работает но есть одно НО !!! поскольку это DLL то манифест XP в процессе не участвует и вместо нужного интерфейса: ![]() получается так: ![]() Если основная программа имеет этот самый манифест XP то проблем таких нету. Но в качестве этой основной программы могут быть разные приложения в том числе и без манифеста XP. Тогда получается как на 2 рисунке. Есть пути решения данной проблемы ? Или есть другие пути создания DLL ? из готового кода EXE с помощью модификаций исходного кода директивами #ifdef DLL_PLUG #endif наподобии такого
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
||||
|
|||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
не надо так заморачиваться, DLL на то и нужна, чтобы "дополнять", а не "заменять" если кому-то потребуется подгрузить GUI без манифеста, пусть грузит, ты же не хочешь, чтобы от твоего GUI кто-либо отказался по причине того, что он на фоне остальных компонентов выделяется "белой вороной" -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Ну хорошо, раз "дополнять", как мне тогда отследить что при вызове моего плагина вызвавшая программа имеет манифест, чтобы изменить поведение интерфейса ? какой нить вариант без учета поиска этого манифеста в ресурсах EXE.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
искать в ресурсах - не совсем корректно, т.к. манифест может лежать рядом,
можно пробовать Theme API, например: IsThemeActive или OpenThemeData проверяй сам (XP под рукой не имею) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
GremlinProg,
Не эти функции не канают, что есть манифест EXE что нету, все равно функции выдают положительный результат активности и включенности темы. В голове возник один подлый вариант, к программе вызывающей DLL подкладывать манифест отдельным файлом. -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |