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

델파이 Q&A
Delphi Programming Q&A
[9193] [질문] 전역후킹에서 핸들값이 잃어버려요?
김길현 [] 1126 읽음    2004-04-30 13:39
안녕하세요.

  전역후킹을 한번 해보려니 힘드네요.  파일 통해 핸들을 기록하고 읽오 오는 것은 되는데요. 그러면 약간씩 훅이 풀리는 경우가 있더라구요.  그래서  메모리에 올려서 사용하려고 합니다. 그런데 이렇게 하니, 다른 프로그램에서 키를 누른 다음에는  핸들 값을 잃어 버려서 UnHook 할때 에러가 발생합니다.

핸들값을 읽어 버리지 않을 려면 값을 어디에, 언제 선언해주어야 하나요?

아래는 DLL파일 소스입니다. ^^;;;

unit uHookApi;

interface



function HookKB : Boolean;
function UnHookKB : Boolean;


implementation

uses
   ShareMem, Windows,Messages;

type
  PDLLData = ^TDLLData;
  TDLLData = record
    HKbHook : HHook;
end;


const
   MMName = 'Hookss';

var

  // 요 것 들을 어디에 다 나두어야  다른 애플리캐이션에 가도 읽어버리지 않을까요?

   DLLData : PDLLData;    
   mHandle : THandle;  

function MyKBHook(Code : Integer;wParam:WPARAM;lParam : LPARAM):LongInt;stdcall;
begin

   if Code >= 0 then
   begin
      Result := Integer(TRUE);
      Exit;
   end;
   Result := CallNextHookEx(DLLData^.HKbHook,Code,wParam,lParam);
end;

function HookKB : Boolean;
var
   Hnd : THandle;
begin
   Hnd := OpenFileMapping(FILE_MAP_WRITE,false,MMName);
   DLLData := MapViewOfFile(Hnd,FILE_MAP_WRITE,0,0,Sizeof(TDLLData));
   DLLData^.HKbHook := SetWindowsHookEx(WH_KEYBOARD,MyKBHook,HInstance,0);
   CloseHandle(Hnd);
end;

function UnHookKB : Boolean;
var
   Hnd : THandle;
begin
   Hnd := OpenFileMapping(FILE_MAP_WRITE,false,MMName);
   DLLData := MapViewOfFile(Hnd,FILE_MAP_WRITE,0,0,Sizeof(TDLLData));
   Result := UnHookWindowsHookEx(DLLData^.HKbHook);
   CloseHandle(Hnd);
end;


Initialization
   mHandle := CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,
   0,Sizeof(TDLLData),MMName);

   if GetLastError = ERROR_ALREADY_EXISTS then halt;
   DLLData := MapViewOfFile(mHandle,FILE_MAP_WRITE,0,0,Sizeof(TDLLData));
finalization
   UnmapViewOfFile(DLLData);
   CloseHandle(mHandle)
end.

+ -

관련 글 리스트
9193 [질문] 전역후킹에서 핸들값이 잃어버려요? 김길현 1126 2004/04/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.