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
[16106] Re:허접이 고수님의 질문의 뜻이 이해못하고 올리는 답변일까 겁나네요
수야 [sooya23] 1450 읽음    2002-03-08 04:23
안녕하세요 수야랍니다.

DLL을 이용해서 WM_PAINT를 후킹하시려구하시는거같네요..

이런 방법은 처음봐서 떨리는군요.. 무서워 ㅡㅡㅋ

일반적으로 MainForm에서 후킹을하게되죠 그리구 일반적으로 이렇게 후킹을하구요

      BEGIN_MESSAGE_MAP
      MESSAGE_HANDLER(WM_PAINT, TWMPAINT, WMPAINT);
      END_MESSAGE_MAP(TForm)

모든 멧시지는 message.hpp에 정의되어있구여 (맞나여? 아~ 간떨려 ㅡㅜ)

이런게 보통 빌더를 쓰시는 분들이 사용하시는 일반적인것이죠?

void __fastcall TForm1::WMEraseBkgnd(TWMEraseBkgnd &Msg)
{
  Msg.Result = false;
}

Msg.wParam을 이용해서 윈도를 다시 그린다거나 여러가지를 하게되죠~?

그리구선 뭐 이런식으로 다시 그리기도하죠

이미 아신다구요? 흑 ㅡㅜ

찾아보셨겠지만 더 자세한 정보는 WM_PAINT의 도움말을 보시기 바랍니다. ㅡㅡ

허접 수야였습니다.   (.. 허접질한거같아서 쓸쓸하당 ㅡㅜ  )


^^ 님이 쓰신 글 :
:
: 안녕하세요.
:
: 요즈음 제가 고민에 빠졌습니다. 다름이 아니라 화면의 변경사항을 체크해 내야 하는데, 이것 저것 방법을 찾고 있습니다. 현재는 global hook을 이용하여 시스템 전역에서 발생하는 WM_PAINT 메세지를 가로챌려고 하고 있습니다. 근데, 뜻대로 잘 않되네요.
:
: 일단, 시스템 전역에 걸친 hook(갈고리)는 완성이 되었습니다. 그런데, WM_PAINT 메세지 정확하게 잡히지를 않네요. 일단 소스를 보시는 것이 좋을 듯...
:
: ------------------------
: DLL source
: ------------------------
: typedef struct
: {
:     HWND    hWnd;           // hook master main form handle
:     HHOOK   lock_KBD;       // lock keyboard hook handle
:     HHOOK   mnt_CRT;        // monitoring screen hook handle
:
: } HookData;
: HookData    gHD = {0, };
:
: extern "C" __export __stdcall bool Set_Mnt_CRT (HWND mainWnd, HINSTANCE hInst);
: extern "C" __export __stdcall bool Unset_Mnt_CRT (void);
:
:
:
:
:
: //---------------------------------------------------
: extern "C" __export __stdcall bool Set_Mnt_CRT (HWND mainWnd, HINSTANCE hInst)
: {
:     bool result = false;
:     gHD.hWnd    = mainWnd;
: //    gHD.mnt_CRT = SetWindowsHookEx (WH_CALLWNDPROC, (HOOKPROC) Hook_Mnt_CRT, hInst, 0);
:     gHD.mnt_CRT = SetWindowsHookEx (WH_GETMESSAGE, (HOOKPROC) Hook_Mnt_CRT, hInst, 0);
:     result = (bool) gHD.mnt_CRT;
:
:     WriteData (&gHD);
:     return result;
: }
: //---------------------------------------------------
: extern "C" __export __stdcall bool Unset_Mnt_CRT (void)
: {
:     if ( gHD.mnt_CRT == 0 )  ReadData (&gHD);
:     return UnhookWindowsHookEx (gHD.mnt_CRT);
: }
: //---------------------------------------------------
: //  monitoring screen hook function
: //---------------------------------------------------
: LRESULT CALLBACK Hook_Mnt_CRT (int code, WPARAM wParam, LPARAM lParam)
: {
:     if ( gHD.mnt_CRT == 0 || gHD.hWnd == 0 )    // global variable 동기화
:         ReadData (&gHD);
:
: //    if ( code >= 0 )
:     if ( code == HC_ACTION && wParam == PM_REMOVE )
:     {
:         if ( ((CWPSTRUCT*)lParam)->message == WM_PAINT )
:         {
:             PostMessage (gHD.hWnd, WM_USER+kChanged_CRT, 0, 0);
:         }
:     }
:     return  CallNextHookEx (gHD.mnt_CRT, code, wParam, lParam);
: }
:
:
:
: ------------------------
: APP source
: ------------------------
: HINSTANCE   gHInst_Mnt_CRT;
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
:     bool (__stdcall* Set_Mnt_CRT)(HWND, HINSTANCE);
:
:     gHInst_Mnt_CRT = LoadLibrary ("hookDll.dll");
:
:     Set_Mnt_CRT = (bool (__stdcall*)(HWND, HINSTANCE)) GetProcAddress(gHInst_Mnt_CRT, "Set_Mnt_CRT");
:     if ( Set_Mnt_CRT (Handle, gHInst_Mnt_CRT) )
:     {
:         Button1->Enabled = false;
:         Button2->Enabled = true;
:     }
: }
: //---------------------------------------------------------------------------
:
: 이렇게 되어 있을 때, 여러가지 시도를 해 보았는데, 다른 메세지(WM_ACTIVATE 같은 것)은 정상적으로 자기 것, 남의 것 가리지 않고 다 가져 오는데, WM_PAINT는 자기 것만 가져 옵니다. 그것도 가끔씩만 가져 옵니다. spy를 띄워 놓고 발생하는 WM_PAINT 이벤트를 확인하면 엄청 많은데, 제 갈고리에는 걸리지 않습니다. 이유가 몰까요 ?
:
: 아시는 분, 도와 주시면 정말 감사하겠습니다.
:
:

+ -

관련 글 리스트
16099 [global hook] WM_PAINT 이벤트를 가로채고 싶은데... ^^ 2447 2002/03/07
16106     Re:허접이 고수님의 질문의 뜻이 이해못하고 올리는 답변일까 겁나네요 수야 1450 2002/03/08
16109         Re:Re:허접이 고수님의 질문의 뜻이 이해못하고 올리는 답변일까 겁나네요 ^^ 1238 2002/03/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.