|
현재 개발하고 있는 것에서 키보드이벤트를 발생하지 못하도록 처리하고 있습니다. 일반적으로 사용하는 후킹방법을 이용하여 하고 있습니다. 시스템 전체에 후킹을 걸기 위해, dll을 하나 만들고, 거기다가 키보드이벤트에 관한 루틴을 포함시켰습니다. 그리고, 프로그램에서 이를 로드하여 처리하고 있습니다. [아래 소스 참조, 테스트하실 수 있게 테스트용 프로그램도 올립니다.]
현재 일반적인 경우의 키보드 이벤트는 모두 발생하지 않는데, 시스템 관련한 키보드이벤트는 발생을 합니다. 이를 어떻게 하여야 할지 난감하여 질문란을 두드립니다. 즉, ctrl+alt+del, alt+tab, 윈도우즈시작메뉴키, 팝업메뉴(마우스오른쪽버튼을 눌렀을 때 나타나는 메뉴) 호출키 등은 이 루틴을 통하여 막을 수가 없더군요.
다른 방법을 아시는 분은 좀 알려 주십시오.
감사합니다.
dll 소스 ----------------------
#ifdef __STATIC_DLL__
LRESULT CALLBACK KBDLockProc (int nCode, WPARAM wParam, LPARAM lParam)
#else
extern "C" __export __stdcall LRESULT KBDLockProc (int nCode, WPARAM wParam, LPARAM lParam)
#endif
{
if ( gHookKBDLock.h_lock_KBD == 0 ) Read_MMF_KBDLock (&gHookKBDLock);
if ( nCode >= 0 )
return (long) true; // 다른 프로세스가 이 메세지 사용 못하도록 함
return CallNextHookEx (gHookKBDLock.h_lock_KBD, nCode, wParam, lParam);
}
program 소스 ------------------
bool __fastcall TForm1::SetKBDLock(void)
{
LRESULT (__stdcall *KBDLockProc) (int nCode, WPARAM wParam, LPARAM lParam);
if ( ! mh_DLLInstance ) mh_DLLInstance = LoadLibrary ("hookEvent.dll");
if ( mh_DLLInstance )
{
KBDLockProc = (LRESULT (__stdcall*)(int, WPARAM, LPARAM)) GetProcAddress (mh_DLLInstance, "KBDLockProc");
if ( KBDLockProc )
{
gHookKBDLock.h_lock_KBD = SetWindowsHookEx (WH_KEYBOARD, (HOOKPROC) KBDLockProc, mh_DLLInstance, 0);
Write_MMF_KBDLock (&gHookKBDLock);
mHookJobNum++;
return true;
}
}
return false;
}
|