LowLevelKeyboardProc 함수
Description
SetWindowsHookExA SetWindowsHookExW함수와 함께 사용되는 애플리케이션 정의 또는 라이브러리 정의 콜백 함수입니다./ 시스템은 새 키보드 입력 이벤트가 스레드 입력 큐에 게시될 때마다 이 함수를 호출합니다.
참고
키 상태 변경에 대한 응답으로 이 콜백 함수를 호출하면 키의 비동기 상태가 업데이트되기 전에 콜백 함수가 호출됩니다. 따라서 콜백 함수 내에서 GetAsyncKeyState 를 호출하여 키의 비동기 상태를 확인할 수 없습니다.
HOOKPROC 형식은 이 콜백 함수에 대한 포인터를 정의합니다. LowLevelKeyboardProc 은 애플리케이션 정의 또는 라이브러리 정의 함수 이름의 자리 표시자입니다.
LRESULT CALLBACK LowLevelKeyboardProc(
_In_ int nCode,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
매개 변수
코드 [in]
형식: int
후크 프로시저가 메시지를 처리하는 방법을 결정하는 데 사용하는 코드입니다.
nCode가 0보다 작은 경우 후크 프로시저는 추가 처리 없이 CallNextHookEx 함수에 메시지를 전달해야 하며 CallNextHookEx에서 반환된 값을 반환해야 합니다.
이 매개 변수는 다음 값 중 하나일 수 있습니다.
값 | 의미 |
---|---|
HC_ACTION 0 | wParam 및 lParam 매개 변수에는 키보드 메시지에 대한 정보가 포함됩니다. |
wParam [in]
형식: WPARAM
키보드 메시지의 식별자입니다.
이 매개 변수는 WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN 또는 WM_SYSKEYUP 메시지 중 하나일 수 있습니다.
lParam [in]
형식: LPARAM
KBDLLHOOKSTRUCT 구조체에 대한 포인터입니다.
반환
형식: LRESULT
nCode가 0보다 작은 경우 후크 프로시저는 CallNextHookEx에서 반환된 값을 반환해야 합니다.
nCode가 0보다 크거나 같고 후크 프로시저가 메시지를 처리하지 않은 경우 CallNextHookEx를 호출하고 반환하는 값을 반환하는 것이 좋습니다. 그렇지 않으면 WH_KEYBOARD_LL 후크를 설치한 다른 애플리케이션은 후크 알림을 받지 않으며 결과적으로 잘못 동작할 수 있습니다.
후크 프로시저가 메시지를 처리한 경우 시스템이 메시지를 후크 체인 또는 대상 창 프로시저의 나머지 부분에 전달하지 못하도록 0이 아닌 값을 반환할 수 있습니다.
설명
애플리케이션은 SetWindowsHookExA/SetWindowsHookExW 함수에 대한 호출에서 후크 프로시저에 대한 포인터와 WH_KEYBOARD_LL 후크 형식을 지정하여 후크 프로시저를 설치합니다.
이 후크는 이를 설치한 스레드의 컨텍스트에서 호출됩니다. 호출은 후크를 설치한 스레드에 메시지를 전송하여 이루어집니다. 따라서 후크를 설치한 스레드에는 메시지 루프가 있어야 합니다.
키보드 입력은 로컬 키보드 드라이버 또는 keybd_event 함수 호출에서 올 수 있습니다. 입력이 keybd_event 호출에서 가져온 경우 입력은 "삽입"됩니다. 그러나 WH_KEYBOARD_LL 후크는 다른 프로세스에 삽입되지 않습니다. 대신 컨텍스트는 후크를 설치한 프로세스로 다시 전환되고 원래 컨텍스트에서 호출됩니다. 그런 다음 컨텍스트가 이벤트를 생성한 애플리케이션으로 다시 전환됩니다.
후크 프로시저는 다음 레지스트리 키의 LowLevelHooksTimeout 값에 지정된 데이터 항목보다 짧은 시간 내에 메시지를 처리해야 합니다.
HKEY_CURRENT_USER**\**Control Panel**\**Desktop
값은 밀리초 단위입니다. 후크 프로시저 시간이 초과되면 시스템에서 메시지를 다음 후크로 전달합니다. 그러나 Windows 7 이상에서는 후크가 호출되지 않고 자동으로 제거됩니다. 애플리케이션에서 후크가 제거되었는지 여부를 알 수 있는 방법은 없습니다.
Windows 10 버전 1709 이상 시스템에서 허용하는 최대 제한 시간 값은 1000밀리초(1초)입니다. LowLevelHooksTimeout 값이 1000보다 큰 값으로 설정된 경우 시스템은 기본적으로 1000밀리초의 시간 제한을 사용합니다.
참고
디버그 후크는 이러한 유형의 낮은 수준의 키보드 후크를 추적할 수 없습니다. 애플리케이션이 낮은 수준의 후크를 사용해야 하는 경우 작업을 작업자 스레드로 전달한 다음 즉시 반환하는 전용 스레드에서 후크를 실행해야 합니다. 애플리케이션이 낮은 수준의 후크를 사용해야 하는 대부분의 경우 원시 입력을 대신 모니터링해야 합니다. 원시 입력은 낮은 수준의 후크보다 다른 스레드를 대상으로 하는 마우스 및 키보드 메시지를 비동기적으로 모니터링할 수 있기 때문입니다. 원시 입력에 대한 자세한 내용은 원시 입력을 참조하세요.