информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Notepad++ полгода раздавал зараженные... 
 Китайский прорыв из ESXi 
 С наступающим 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Как получить указатель на 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, так с помощью её и сделал уже, правда метод получился сложный, но сильный: изменял код в потоке целевой программы :) Ну не допер сразу :~(.

А вообще, спасибо. Если что надо - спрашивай. Сами в принципе не за дарма хлеб с маслом получаем, кое что знаем :)
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2026 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach