프로그래밍/C++
[C++ WinAPI] 키보드 후킹
당근천국
2010. 12. 26. 03:13
키보드 후킹이란 말 그대로 키가 눌렸을 때 그 키의 정보를 가지고 오거나 수정 하는 것을 말합니다.
연관글 영역
0. 키보드 후킹을 하자
흔히 해킹기법으로 잘 알려졌지만 쓰기에 따라서 굉장히 유용한 기능(?)이죠.
특정 키를 막거나 키보드 메크로를 만들거나 할 때 많이 사용합니다.
1. 후킹 시 사용할 함수 작성
먼저 후킹 됐을때 사용할 함수를 정의합니다.
'WinAPI'인 'LowLevelKeyboardProc'를 정의하면 됩니다.
(참고 : MS Learn - LowLevelKeyboardProc 함수 )
HHOOK hKeyboardHook;
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
PKBDLLHOOKSTRUCT p;
if (nCode == HC_ACTION)
{
p = (PKBDLLHOOKSTRUCT) lParam;
if (((p->vkCode == VK_LWIN) || (p->vkCode == VK_RWIN))
|| ( p->flags & LLKHF_ALTDOWN)
|| (p->vkCode == VK_TAB)
)
return 1;
}
return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
}
1번 줄 : 'HHOOK hKeyboardHook' 설치된 훅의 인스턴스를 저장할 변수입니다.
11번 줄: 넘어온 키 정보입니다.
이후 코드는 넘어온 키 정보를 사용하는 코드입니다.
2. 훅(hook) 설치
후킹을 하려면 훅을 후킹 할 대상에 연결해야 합니다.
그때 사용하는 함수가 'SetWindowsHookEx'입니다.
hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInst, 0); // hook 설치
훅을 제거할 때는
UnhookWindowsHookEx(hKeyboardHook); //제거
hKeyboardHook = NULL;
(이 예제코드는 'int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszCmdParam, int nCmdShow)' 에서 사용할 때의 예제입니다.)
에러 상황
컴파일했는데 'PKBDLLHOOKSTRUCT'를 못 찾는 에러가 난다면
#define _WIN32_WINNT 0x0400
를 추가하여 막을수 있습니다.
마무리
이 방법으로 Alt + Del + Ctrl 만 빼고 모든 시스템키까지 막을 수 있습니다....
(정작 중요한 건 Alt + Del + Ctrl 데 말입니다-_-;;;)