Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не могу найти форму через DLL

490
05 ноября 2007 года
frid-karatel
357 / / 15.09.2007
Не могу найти форму в программе через DLL.
Что делаю:
1. Подключаю к сторонней программе мою DLL
2. Пытаюсь найти форму в приложении, чтобы работать с компонентами на форме

О программе:
1. Не моя
2. Запакована
3. Через InqSoft WindowScanner (можно и Spy++) получил:
а) Заголовок: Alpha Community Center
б) Класс: TAlpha_Form

Ход действий:
Вот код моей DLL
Код:
#include <vcl.h>
#include <windows.h>
//------------------------------------------------------------------------------
#pragma argsused
//------------------------------------------------------------------------------
TForm *Alpha_Form = NULL;
//------------------------------------------------------------------------------
void Init()
{
//  ShowMessage("Initializing...");
  TForm **pForm = (TForm**)GetProcAddress(GetModuleHandle(NULL), "_Alpha_Form");
  if(pForm != NULL)
  {
    ShowMessage("Form finded!");
    Alpha_Form = *pForm;
    if(Alpha_Form != NULL)
    {
      //  Любые действия
    }
  }
}
//------------------------------------------------------------------------------
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
  switch(reason)
  {
    case DLL_PROCESS_ATTACH:
//      ShowMessage("CONNECTED");
      Init();
      break;
  }
  return 1;
}
//------------------------------------------------------------------------------


Не знаю почему не работает здесь, но такой код успешно работает при использовании в моих программах, а также в других - короче, во всех (хотя на всех не проверял :) ), кроме этой...

Помогите и подскажите, что делать-то?
490
08 ноября 2007 года
frid-karatel
357 / / 15.09.2007
нашел ответ на этот вопрос! Можно осуществить поиск компонентов по дескрипторам окон:
Код:
TWinControl* GetComponent(HWND hWnd)
{
    char b[32];
    sprintf(b, "Delphi%.8X", GetCurrentProcessId());
    return (TWinControl*)GetProp(hWnd, b);
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TForm *f=(TForm*)::GetComponent(Form1->Handle);
  TButton *b=(TButton*)::GetComponent(Form1->Button1->Handle);

  if(f) f->Caption="xa xa xa";
  if(b) b->Caption="xe xe xe";

}


Спасибо 586 за помощь! ;)
9.0K
12 ноября 2007 года
ikro
31 / / 12.03.2007
Цитата:

TForm **pForm = (TForm**)GetProcAddress(GetModuleHandle(NULL), "_Alpha_Form");
if(pForm != NULL)
{
ShowMessage("Form finded!");
Alpha_Form = *pForm;
if(Alpha_Form != NULL)
{
// Любые действия
}
}


И ты хотел, чтоб оно у тебя так заработало?! Форма - это не процедура! Поэтому вызовом GetProcAddress ты не сделаешь ничего!

246
12 ноября 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: ikro
И ты хотел, чтоб оно у тебя так заработало?! Форма - это не процедура! Поэтому вызовом GetProcAddress ты не сделаешь ничего!


Вот ты не поверишь, но GetProcAddress абсолютно по барабану форма это или процедура.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог