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
[1681] Re:Hooking에 관한 설명 및 예제는 없을까요?
박지훈.임프 [cbuilder] 3871 읽음    1999-07-29 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);

  }
  //---------------------------------------------------------------------------

그럼 참고하세요...


+ -

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