Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Как получить указатель на VCL-класс зная лишь его HWND? 18.02.04 23:02
Автор: TMind Статус: Незарегистрированный пользователь
|
Может кто поможет в следующей проблеме:
Можно ли получить указатель на VCL-класс(TDBGrid), зная HWND его окна, из ДЛЛ внедренной в чужой процесс (сам компонент создан этим процессом)?
(Ось W2k)
Функция FindControl не срабатывает (наверное из-за того, что работает в контексте ДЛЛ, а не процесса)
Подробнее:
Есть программа (ЕХЕ), которая отображает содержимое некой БД. Сама БД зашифрована неизвестным методом.
Остается внедряться в процесс и брать данные из его памяти. У процесса есть окно класса TDBGridEh. Напрашивается решение по цепочке DBGrid->DataSource->DataSet выйти на этот самый датасет и уже от него брать данные. Но вот здесь и возникает вышеописанная проблема.
Кто сможет помочь - буду весьма признателен
|
 |
GetProp или EnumProps 20.02.04 22:19
Автор: Neznaika <Alex> Статус: Member
|
1) Насколько я помню, указатель на VCL-класс запоминается примерно так - SetProp( hWnd, MakeIntAtom(ControlAtom), THandle(Self) );
Т.е, надо смотреть функции типа GetProp или EnumProps.
При этом hWnd - тебе известно.
Остается уточнить атом. Что-то вроде этого:
Var
szWindowAtom: String;
hWindowAtom: TAtom;
lpControl: Pointer; // = Result
szWindowAtom := Format('Delphi%.8X',[GetCurrentProcessID]);
hWindowAtom := GlobalFindAtom( PChar(szWindowAtom) );
lpControl := Pointer( GetProp( hWnd, MakeIntAtom(hWindowAtom)) );
2) Насчет FindControl -
А он и не должен работать. Потому, что там cравнивается Hinstance, а HInstance твоей Dll не совпадает с HInstance самого приложения.
|
 |  |
Ответ создателя нити. 22.02.04 12:25
Автор: TMind Статус: Незарегистрированный пользователь
|
Спасибо, конечно, большое! Как и обещал, я весьма тебе признателен :) (на самом деле).
А насчет FindControl, так с помощью её и сделал уже, правда метод получился сложный, но сильный: изменял код в потоке целевой программы :) Ну не допер сразу :~(.
А вообще, спасибо. Если что надо - спрашивай. Сами в принципе не за дарма хлеб с маслом получаем, кое что знаем :)
|
|
|