![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Domoffou |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 22.6.2008 Где: Северная Венеция Репутация: нет Всего: нет |
Добрый день.
В DLL создал хук на активные окна. Когда окно сменилось - DLL отправляет SendMessage MYMESSAGE основному ехе. Программа работает так: 1. Овновной EXE лезет в хуковскую DLL и записывает в ее глобальное значение свой хэндл. 2. устанавливает хук 3. при активации окна сендмессадж глобальному хэндлу Проблема в том, что когда юзер работает с овновным моим ЕХЕ - то все отправляется, а вот когда переключение окон ведется не в моей программе (например между нотепадом и пэинтом), то в логах вижу, что Handle пустует, т.е. сообщения не доходят до моей проги (хотя отправляются). Вот основные функции библиотеки:
и соответственно RegisterWindowMessage в библиотеке и в программе. + ко всему, мне удалось решить проблему спомощью MyAppWnd := FindWindow('TForm1', 'Form1'); но это не выход, т.к. каждый раз искать свое окно не вариант, ведь функцию написал и она работает с другими хуками :( Это сообщение отредактировал(а) Domoffou - 6.7.2008, 14:03 |
|||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 19 Всего: 95 |
Как вариант - перед установкой хука сохраняй хендл основного окна где-нибудь в реестре, а инициализацию хендла MyAppWnd в DLL-ке делай по DLL_PROCESS_ATTACH чтением этого значения из реестра... У мну всегда работало...
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| Domoffou |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 22.6.2008 Где: Северная Венеция Репутация: нет Всего: нет |
Реестр не всегда приятен, в плане если туда залезть, юзерам покажется это подозрительно.
Оставил по FindWindow. |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
||||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
Посмотрите http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=548
У вас ошибка в том, что вы не передаёте Handle между различными процессами. Вы ставите его только в одном процессе, но не передаёте другим. Решается это использованием средств IPC. См. мою ссылку или ссылки dump выше. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |