#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;
}
//------------------------------------------------------------------------------
Не могу найти форму через DLL
Что делаю:
1. Подключаю к сторонней программе мою DLL
2. Пытаюсь найти форму в приложении, чтобы работать с компонентами на форме
О программе:
1. Не моя
2. Запакована
3. Через InqSoft WindowScanner (можно и Spy++) получил:
а) Заголовок: Alpha Community Center
б) Класс: TAlpha_Form
Ход действий:
Вот код моей DLL
Код:
Не знаю почему не работает здесь, но такой код успешно работает при использовании в моих программах, а также в других - короче, во всех (хотя на всех не проверял :) ), кроме этой...
Помогите и подскажите, что делать-то?
Код:
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";
}
{
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 за помощь! ;)
Цитата:
TForm **pForm = (TForm**)GetProcAddress(GetModuleHandle(NULL), "_Alpha_Form");
if(pForm != NULL)
{
ShowMessage("Form finded!");
Alpha_Form = *pForm;
if(Alpha_Form != NULL)
{
// Любые действия
}
}
И ты хотел, чтоб оно у тебя так заработало?! Форма - это не процедура! Поэтому вызовом GetProcAddress ты не сделаешь ничего!
Цитата: ikro
И ты хотел, чтоб оно у тебя так заработало?! Форма - это не процедура! Поэтому вызовом GetProcAddress ты не сделаешь ничего!
Вот ты не поверишь, но GetProcAddress абсолютно по барабану форма это или процедура.