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

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[370] 시스템 키 후킹과 시작버튼 막기[최종 업뎃]
수야!╋ [sooya23] 10695 읽음    2002-10-08 17:32
개발환경은 Windows XP 빌더6 패치2 입니다. CPU III 800EB 256MB

호환환경은 Window 기반의 모든 운영체제입니다.

98이상의 운영체제만 호환으로 타겟을 잡았다면.. ㅡ.ㅡ; 이리 어렵진 않으실겁니다.

한번 읽어보시는것도 어떠실런지

오늘은 10월 31일 키후킹은 못했지만 방법은 알아낸듯싶습니다.

그리고 제가 처리한 방법은 키후킹이 아니구요 캬캬

추가 설명좀 드리겠습니다.

WM_KEYBOARD나 WM_MOUSE 는 시스템 큐에서 나온 멧시지입니다.

큐에서 나오면서 SendKey를 통해 운영체제에 이미 전달되어버렸답니다. ㅡ_ㅡ 이런~

그럼 이제 방법은 값을 받은 OS가 헤당 처리를 하기위해서 다시 또 멧시지를 보내게될때 그놈을 잡는거죠 ( 잡아라~ ㅡ_ㅡa )

이게 제가 쓴방법이죵 ㅡ_ㅡa 다른방법은 아마도 이놈들일것같습니다.

1. WH_JOURNALPLAYBACK Hook
2. WH_JOURNALRECORD Hook

CBT 후킹입니다.

모든 멧시지죠. 네트웍에서 전송받았다거나 기타 등등 모든 그 모든 멧시지입니다.

점점 윈도우 내부가 궁금해지는군요 ㅡ0ㅡ; 참고로 윈도우는 모든게 멧시지도 돌아가더군요

ㅡ.ㅡ; 수많은 멧시지들이 있구요 ㅡ.ㅡ;


DLL 코딩 부분입니다.

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
        return 1;
}
//---------------------------------------------------------------------------
HHOOK KhHook;

extern "C" __declspec(dllexport) LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
  if(nCode < 0)
    return(CallNextHookEx(WKhHook, nCode, wParam, lParam));

  switch(nCode)
  {
    case HCBT_SYSCOMMAND :
      return (long) true;
  }

  return (long) true;
}

위 그대로 DLL을 만들어 컴파일하시면 됩니다.

한가지 추가하자면 nCode가 0보다 작으면 반듯이 해당값으로 CallNextHookEx를 호출해줘야된다는겁니다. 반듯이~

위 HCBT_SYSCOMMAND로 전달되는 내용들은 MSDN에서 참고하시기 바랍니다. (많아엽 ㅡ.ㅡ;)

이제 프로그램부분 코딩입니다.

HHOOK hHookKey;
HINSTANCE KhinstDLL;

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  KhinstDLL = LoadLibrary((LPCSTR)"..//Keybd.dll");

  if(KhinstDLL == NULL)
  {
    ShowMessage("DLL Load Error");
    return;
  }

  HOOKPROC KeyboardProc =(HOOKPROC) GetProcAddress(KhinstDLL, "CBTProc");

  hHookKey = SetWindowsHookEx(WH_CBT, (HOOKPROC) KeyboardProc, KhinstDLL, 0);
}

에공.. 소스 끝입니다. ㅡ0ㅡ;; 하나가 남았네요 보여드리기 전에 설명

SetWindowsHookEx함수를 보시면 다른 것들이랑 틀린것이 하나 있는데요 바로

WH_CBT입니다. 별거 없죠? ㅡ0ㅡ; 다시 말씀드리자면

다시 말씀드리지만 시스템 큐에서 SendKey로 나온녀석들을 처리하기위해 보내지는 멧시지를 가로채는겁니다.

마지막 소스입니다.

void __fastcall TForm1::Button3Click(TObject *Sender)
{
  UnhookWindowsHookEx(hHookKey);
  FreeLibrary(KhinstDLL);
}
//---------------------------------------------------------------------------

전보다 좀 간단해졌습니다. 중요내용이 좀 포함됬구요 ㅋㅋ

ㅡ.ㅡ; 암튼 인제 후킹은 지겹습니다 ㅡ.ㅡ;;
하느리 [handebug]   2002-11-09 14:19 X
이 방법에 의해서는 일반적인 키이벤트를 가로채서 사용을 못하도록 할 수는 있으나, NT계열에서의 시스템키 (Ctrl+Alt+Del)를 막을 수는 없습니다.
수야!╋ [sooya23]   2002-11-13 19:51 X
넵 맞습니당 ㅡ_ㅡ; 하지만! 창은 뜨지만 작업창을 컨트롤 못하게할수는 있습니다.

+ -

관련 글 리스트
370 시스템 키 후킹과 시작버튼 막기[최종 업뎃] 수야!╋ 10695 2002/10/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.