델초보임당...아래 기술문서를 보시구
구현 부탁 드립니당..^^
WIN32 SDK
버전:윈도우95고객기술지원부(PSS)
제목:윈도우95에서 시스템
전반-훅(hook)을 만들어 사용하는 방법
Application Note
4/3/97 - WIN32SDK0017
내용: 3페이지
요 약
윈도우95는 AppInit_DLLs라는 레지스트리 값을 이용하여
프로세스의 어드레스 공간에 DLL이 로드되게 하는 기능을
지원하지 않는다.
윈도우 NT에서는 모든 프로세스가 실행될 때 AppInit_DLLs
레지스트리 값에 리스트된 DLL들을 실행되는 프로세스
어드레스 공간에 로드한다.
윈도우 95에서는 이와 유사한 기능을 시스템-전반 훅(hook)을
이용하여 구현 가능하다.
여기에서는 시스템-전반 훅(hook)을 이용하여 구현하는
방법을 설명한다.
추가 정보
시스템-전반 훅(hook)을 이용하려면 반드시 DLL내에
훅킹될 함수(콜백 함수)가 있어야 한다. 그다음,
이 함수가 콜 될 때, 윈도우95는 타겟 어플리케이션에로
훅 DLL을 맵핑해야 한다.
그러면 실제 훅킹된 함수가 타겟 어플리케이션의
일부로써 실행된다.
시스템-전반 훅(hook)을 생성하려면 다음의
2단계의 코딩이 필요하다.
1. 훅킹 함수로 사용될 익스포트 함수가
포함된 DLL을 만든다.
여기에서는 WH_KEYBOARD 시스템-전반 훅(hook)을 구현하는
함수의 이름은 HookFunction인 콜백 함수로 선언한다:
// 키보드 메시지를 가로챈다.
__declspec(dllexport) LRESULT CALLBACK HookFunction(
int code,
WPARAM wParam,
LPARAM lParam)
{
char szVCode[50];
// 가로채진 가상 키 코드를 메시지박스에서 보여 준다.
sprintf(szVCode, "가상 키 코드: %lx", wParam);
MessageBox(NULL, szVCode,"키가 눌려짐 ", MB_OK);
:
}
이 DLL의 모듈 정의 파일에는 다음과 같이 선언되어야 한다:
LIBRARY HOOK
EXPORTS
HookFunction
2. 시스템-전반 훅을 설치한다. 훅을 설치하려면,
DLL이 로드되어야 하고, 훅 함수의 어드레스를
GetProcAddress를 이용하여 알아낸후,SetWindowsHookEx를
콜한다. 다음은 예이다:
// 시스템-전반 훅을 추가한다.
hHookDll = LoadLibrary("hook");
hHookProc = (HOOKPROC) GetProcAddress(hHookDll, "HookFunction");
// 모든 키보드 메시지를 가로채는 키보드 훅을 설치한다.
hSystemHook = SetWindowsHookEx(WH_KEYBOARD,hHookProc,hHookDll,0);
시스템-전반 훅을 이용하는 어플리케이션을 종료한 뒤
시스템-전반 훅을 언훅(unhook)하는 작업을 다음과 같이 해야 한다:
// 훅을 제거하고 훅에 사용되었던 DLL을 해제한다
UnhookWindowsHookEx(hSystemHook);
FreeLibrary(hHookDll);
참고 자료
Win32 SDK Reference
(주)마이크로소프트 고객기술지원부
델파이에서는 기본적으로 TWinControl개체가 메세지를 Hook하고 있으므로 message를 override하셔서 구현하시면 될거 같은데... 궁금한것을 구체적으로 알고 싶네요 ^^
델초보 wrote:
> 델초보임당...아래 기술문서를 보시구
>
> 구현 부탁 드립니당..^^
>
>
> WIN32 SDK
>
> 버전:윈도우95고객기술지원부(PSS)
>
> 제목:윈도우95에서 시스템
>
> 전반-훅(hook)을 만들어 사용하는 방법
>
> Application Note
>
> 4/3/97 - WIN32SDK0017
>
> 내용: 3페이지
>
> 요 약
>
> 윈도우95는 AppInit_DLLs라는 레지스트리 값을 이용하여
>
> 프로세스의 어드레스 공간에 DLL이 로드되게 하는 기능을
>
> 지원하지 않는다.
>
> 윈도우 NT에서는 모든 프로세스가 실행될 때 AppInit_DLLs
>
> 레지스트리 값에 리스트된 DLL들을 실행되는 프로세스
>
> 어드레스 공간에 로드한다.
>
> 윈도우 95에서는 이와 유사한 기능을 시스템-전반 훅(hook)을
>
> 이용하여 구현 가능하다.
>
> 여기에서는 시스템-전반 훅(hook)을 이용하여 구현하는
>
> 방법을 설명한다.
>
> 추가 정보
>
> 시스템-전반 훅(hook)을 이용하려면 반드시 DLL내에
>
> 훅킹될 함수(콜백 함수)가 있어야 한다. 그다음,
>
> 이 함수가 콜 될 때, 윈도우95는 타겟 어플리케이션에로
>
> 훅 DLL을 맵핑해야 한다.
>
> 그러면 실제 훅킹된 함수가 타겟 어플리케이션의
>
> 일부로써 실행된다.
>
> 시스템-전반 훅(hook)을 생성하려면 다음의
>
> 2단계의 코딩이 필요하다.
>
> 1. 훅킹 함수로 사용될 익스포트 함수가
>
> 포함된 DLL을 만든다.
>
> 여기에서는 WH_KEYBOARD 시스템-전반 훅(hook)을 구현하는
>
> 함수의 이름은 HookFunction인 콜백 함수로 선언한다:
>
> // 키보드 메시지를 가로챈다.
>
> __declspec(dllexport) LRESULT CALLBACK HookFunction(
> int code,
> WPARAM wParam,
> LPARAM lParam)
> {
> char szVCode[50];
>
> // 가로채진 가상 키 코드를 메시지박스에서 보여 준다.
>
> sprintf(szVCode, "가상 키 코드: %lx", wParam);
> MessageBox(NULL, szVCode,"키가 눌려짐 ", MB_OK);
> :
> }
>
> 이 DLL의 모듈 정의 파일에는 다음과 같이 선언되어야 한다:
>
> LIBRARY HOOK
>
> EXPORTS
> HookFunction
>
> 2. 시스템-전반 훅을 설치한다. 훅을 설치하려면,
>
> DLL이 로드되어야 하고, 훅 함수의 어드레스를
>
> GetProcAddress를 이용하여 알아낸후,SetWindowsHookEx를
>
> 콜한다. 다음은 예이다:
>
> // 시스템-전반 훅을 추가한다.
> hHookDll = LoadLibrary("hook");
> hHookProc = (HOOKPROC) GetProcAddress(hHookDll, "HookFunction");
>
> // 모든 키보드 메시지를 가로채는 키보드 훅을 설치한다.
>
> hSystemHook = SetWindowsHookEx(WH_KEYBOARD,hHookProc,hHookDll,0);
>
> 시스템-전반 훅을 이용하는 어플리케이션을 종료한 뒤
>
> 시스템-전반 훅을 언훅(unhook)하는 작업을 다음과 같이 해야 한다:
>
> // 훅을 제거하고 훅에 사용되었던 DLL을 해제한다
> UnhookWindowsHookEx(hSystemHook);
> FreeLibrary(hHookDll);
>
> 참고 자료
> Win32 SDK Reference
>
> (주)마이크로소프트 고객기술지원부