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
[4798] Re:[질문] 후킹에 대한....
한꼬맹이 [] 4688 읽음    2001-01-08 00:00
박정만 님이 쓰신 글 :
: 후킹을 처음 공부하는 후킹 초보입니다.
: MainWin이라는 Name을 가진 윈도우가 발생하는 마우스 메세지만 처리하려고 합니다..
:
: 그래서, MouseHookHandle    = SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseHookProc, NULL, GetWindowThreadProcessId(MainWin->Hancle, NULL));
:
: 으로 했거든요.. 그런 뒤, 아래와 같은 방식으로 처리했습니다.
:
: LRESULT    CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
: {
:     LPMSG lpMsg;
:
:     if(nCode >= 0)
:     {
:         lpMsg = (LPMSG)lParam;
:
:         switch(lpMsg->message)
:         {
:         case WM_LBUTTONDOWN:           
:             break;
:         case WM_LBUTTONUP:
:             break;
:         case WM_RBUTTONDOWN:
:             break;
:         case WM_RBUTTONUP:           
:             break;
:         default:
:             break;
:         }
:
:         return true;
:     }
:
:     return CallNextHookEx(hHook, nCode, wParam, lParam);
: }
:
: 그런데, 이걸 실행하여 마우스 이벤트를 일으키면 EAccessViolation 이라는 에러메세지가 뜹니다.
: 어디서 설명 들으니깐 DLL을 만들어서 해야 한다고 하는데, VCL환경에서 DLL을 만들지 않고, 해당 윈도우가 주는 마우스 메세지만 처리할수는 없는 것인가요?
:
: Events창에서 제공하는 키보드및 마우스 이벤트 함수들은 세세한 제어가 힘들어서요...

안녕하십니까?

한꼬맹이 입니다.

원래 후킹에는 윈도우즈 전체에 거는 후킹과 자신의 어플리케이션에 거는

후킹 두가지로 나눌수 있습니다. 전자의 경우 DLL파일을 작성하여 그기다가 훅을 걸어주지만

후자의 경우 자신의 어플에다 작성하시면 됩니다. 박정만님 코드를 보니까 후자인것 같군요..

제가 간단히 다시 작성해서 올립니다.

HHOOK  hHook;
TPoint Pt;

LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    LPMOUSEHOOKSTRUCT HookParam;

    if(nCode >= 0)
    {
        HookParam = (LPMOUSEHOOKSTRUCT)lParam;
        Pt = HookParam->pt;
        Caption = Format("X = %d,  Y = %d", ARRAYOFCONST(((int)Pt.x, (int)Pt.y))); 
    }

    return(CallNextHookEx(hHook, nCode, wParam, lParam));
}

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  hHook = SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseHookProc, NULL, GetCurrentThreadId());

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

그럼 참고하세요....

+ -

관련 글 리스트
4796 [질문] 후킹에 대한.... 박정만 3118 2001/01/07
4798     Re:[질문] 후킹에 대한.... 한꼬맹이 4688 2001/01/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.