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
[44248] API 내부폼 후킹에 대한거요...왜 한번 더 실행 돼는지 아는분..~
BlackNetwork [] 1102 읽음    2006-03-24 15:49
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

LPCTSTR ProgName = "Form1";
HHOOK hHook;
LRESULT CALLBACK HookMouseProc(int nCode, WPARAM wParam, LPARAM lParam) ;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
hHook = SetWindowsHookEx(13,(HOOKPROC)::HookMouseProc,GetModuleHandle(NULL), 0);
}
//---------------------------------------------------------------------------
LRESULT CALLBACK HookMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    HWND hwnd;
    LRESULT lResult = 0;
    if(nCode == HC_ACTION)
    {
        if(((EVENTMSG*)lParam)->message == VK_F10)
        {
            hwnd=FindWindow(NULL,ProgName);
            SendMessage(hwnd,WM_USER+4,1,1);
            return 1;
        }
        else if(((EVENTMSG*)lParam)->message == VK_F12)
        {
            hwnd=FindWindow(NULL,ProgName);
            SendMessage(hwnd,WM_USER+5,1,1);
            return 1;
        }
        else if(((EVENTMSG*)lParam)->message == VK_F8)
        {
            hwnd=FindWindow(NULL,ProgName);
            SendMessage(hwnd,WM_USER+6,1,1);
            return    1;
        }
    }

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

}

//---------------------------------------------------------------------------
void __fastcall TForm1::OnMyKeyEvent(TMessage &Message)
{
  switch(Message.Msg)
  {
    case WM_USER+4:
      ShowMessage("F10 press");
      break;
    case WM_USER+5:
      ShowMessage("F12 press");
      break;
    case WM_USER+6:
      ShowMessage("F8 press");
      break;

  }
}
헤더 파일
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
   TEdit *Edit1;
   TButton *Button1;
   void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:        // User declarations
   __fastcall TForm1(TComponent* Owner);

protected:
  void __fastcall OnMyKeyEvent(TMessage &Message);
BEGIN_MESSAGE_MAP
  MESSAGE_HANDLER(WM_USER+4, TMessage, OnMyKeyEvent);
  MESSAGE_HANDLER(WM_USER+5, TMessage, OnMyKeyEvent);
  MESSAGE_HANDLER(WM_USER+6, TMessage, OnMyKeyEvent);
END_MESSAGE_MAP(TForm)
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

왜 한번 더 실행 돼는지 아세요???

+ -

관련 글 리스트
44248 API 내부폼 후킹에 대한거요...왜 한번 더 실행 돼는지 아는분..~ BlackNetwork 1102 2006/03/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.