: 방금 [Lecture]란을 다녀 왔는데 유용한 팁들이 상당하더군요.
:
: Hooking에 관한 설명이나 간단한 예제는 없을까요? 시스템을
: 의도하는 대로 제어하려다 보니까 Hooking에 관련된 부분이
: 떡 버티고 있네요. 온라인 레퍼런스를 봐도 설명이 부실하고...
임펠리테리입니다.
미토프의 사이트(
http://members.xoom.com/mitov/)에서 들고 온겁니다.
Catching messages of another object
class TForm1 : public TForm
{
......
TMemo *Memo1;
......
......
int (__stdcall *OldHookComponentProc) ();
int (__stdcall *NewHookComponentProc) ();
HWND OwnerHandle;
......
......
void __fastcall HookComponentProc(TMessage &aMsg);
void __fastcall HookComponent();
void __fastcall UnhookComponent();
......
......
__fastcall TForm1 (TComponent* _Owner) ;
__fastcall ~TForm1();
......
......
};
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1 (TComponent* _Owner) :
TCustomPanel(_Owner),
NewHookComponentProc ( NULL )
{
HookComponent();
}
//---------------------------------------------------------------------------
__fastcall TForm1::~TForm1()
{
if ( NewHookComponentProc )
UnhookForm();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::HookComponent()
{
OwnerHandle = Memo1->Handle;
OldHookComponentProc = (int (__stdcall *)()) GetWindowLong(OwnerHandle, GWL_
WNDPROC);
NewHookComponentProc = (int (__stdcall *)()) MakeObjectInstance(HookComponen
tProc);
SetWindowLong(OwnerHandle, GWL_WNDPROC, (long) NewHookComponentProc);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::UnhookComponent()
{
SetWindowLong(OwnerHandle, GWL_WNDPROC, (long) OldHookComponentProc);
if (NewComponentFormProc)
FreeObjectInstance(NewComponentFormProc);
NewHookComponentProc = NULL;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::HookComponentProc( TMessage &aMsg )
{
switch ( aMsg.Msg )
{
case WM_SHOWWINDOW:
{
// Memo1 -> WM_SHOWWINDOW .
}
case WM_SIZE:
{
// Memo1 -> WM_SIZE .
}
}
// Default.
aMsg.Result = CallWindowProc(OldHookFormProc, OwnerHandle,
aMsg.Msg, aMsg.WParam, aMsg.LParam);
}
//---------------------------------------------------------------------------
그럼 참고하세요...