C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[3278] Re:Re:Hooking에 관한 설명 및 예제는 없을까요?
이강건 [] 3885 읽음    2000-06-15 00:00
박지훈.임프 님이 쓰신 글 :
: : 방금 [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);

:   }
:   //---------------------------------------------------------------------------

: 그럼 참고하세요...
:
:


임펠리테리님~!

위의 소스는 훅이 아니라 Sub Classing에 관한 내용이네요..
즉, 메시지 핸들링하는 방법중에 하나라는 얘기입니다.

실제로 훅킹을 위해서는 SetWindowsHookEx() 또는 CallNextHookEx()등의 API를 사용하여 시스템 또는 쓰레드의 메시지를 훅킹합니다.

저도 이 훅킹에 관한 소스를 찾고 있던중에 여기에 이글을 쓰게 되었습니다.

그럼 이만...

+ -

관련 글 리스트
1674 Hooking에 관한 설명 및 예제는 없을까요? 홍한희 3359 1999/07/28
1681     Re:Hooking에 관한 설명 및 예제는 없을까요? 박지훈.임프 3872 1999/07/29
3278         Re:Re:Hooking에 관한 설명 및 예제는 없을까요? 이강건 3885 2000/06/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.