LowLevelMouseProc 함수

Description

SetWindowsHookExA SetWindowsHookExW함수와 함께 사용되는 애플리케이션 정의 또는 라이브러리 정의 콜백 함수입니다./ 시스템은 새 마우스 입력 이벤트가 스레드 입력 큐에 게시될 때마다 이 함수를 호출합니다.

HOOKPROC 형식은 이 콜백 함수에 대한 포인터를 정의합니다. LowLevelMouseProc 은 애플리케이션 정의 또는 라이브러리 정의 함수 이름의 자리 표시자입니다.

LowLevelMouseProc 은 애플리케이션 정의 또는 라이브러리 정의 함수 이름의 자리 표시자입니다.

LRESULT CALLBACK LowLevelMouseProc(
  _In_ int    nCode,
  _In_ WPARAM wParam,
  _In_ LPARAM lParam
);

매개 변수

nCode [in]

형식: int

후크 프로시저가 메시지를 처리하는 방법을 결정하는 데 사용하는 코드입니다.

nCode가 0보다 작은 경우 후크 프로시저는 추가 처리 없이 CallNextHookEx 함수에 메시지를 전달해야 하며 CallNextHookEx에서 반환된 값을 반환해야 합니다.

이 매개 변수는 다음 값 중 하나일 수 있습니다.

의미
HC_ACTION 0 wParamlParam 매개 변수에는 마우스 메시지에 대한 정보가 포함됩니다.

wParam [in]

형식: WPARAM

마우스 메시지의 식별자입니다.

이 매개 변수는 WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_RBUTTONDOWN 또는 WM_RBUTTONUP 메시지 중 하나일 수 있습니다.

lParam [in]

형식: LPARAM

MSLLHOOKSTRUCT 구조체에 대한 포인터입니다.

반환

형식: LRESULT

nCode가 0보다 작은 경우 후크 프로시저는 CallNextHookEx에서 반환된 값을 반환해야 합니다.

nCode가 0보다 크거나 같고 후크 프로시저가 메시지를 처리하지 않은 경우 CallNextHookEx를 호출하고 반환하는 값을 반환하는 것이 좋습니다. 그렇지 않으면 WH_MOUSE_LL 후크를 설치한 다른 애플리케이션은 후크 알림을 받지 않으며 결과적으로 잘못 동작할 수 있습니다.

후크 프로시저가 메시지를 처리한 경우 시스템이 메시지를 후크 체인 또는 대상 창 프로시저의 나머지 부분에 전달하지 못하도록 0이 아닌 값을 반환할 수 있습니다.

설명

애플리케이션은 SetWindowsHookExA/SetWindowsHookExW 함수에 대한 호출에서 후크 프로시저에 대한 포인터와 WH_MOUSE_LL 후크 형식을 지정하여 후크 프로시저를 설치합니다.

이 후크는 해당 후크를 설치한 스레드의 컨텍스트에서 호출됩니다. 호출은 후크를 설치한 스레드에 메시지를 전송하여 이루어집니다. 따라서 후크를 설치한 스레드에는 메시지 루프가 있어야 합니다.

마우스 입력은 로컬 마우스 드라이버 또는 mouse_event 함수 호출에서 올 수 있습니다. 입력이 mouse_event 호출에서 가져온 경우 입력은 "삽입"됩니다. 그러나 WH_MOUSE_LL 후크는 다른 프로세스에 주입되지 않습니다. 대신 컨텍스트는 후크를 설치한 프로세스로 다시 전환되고 원래 컨텍스트에서 호출됩니다. 그런 다음 컨텍스트가 이벤트를 생성한 애플리케이션으로 다시 전환됩니다.

후크 프로시저는 다음 레지스트리 키의 LowLevelHooksTimeout 값에 지정된 데이터 항목보다 짧은 시간 내에 메시지를 처리해야 합니다.

HKEY_CURRENT_USER\Control Panel\Desktop

값은 밀리초 단위입니다. 후크 프로시저 시간이 초과되면 시스템은 메시지를 다음 후크로 전달합니다. 그러나 Windows 7 이상에서는 후크가 호출되지 않고 자동으로 제거됩니다. 애플리케이션에서 후크가 제거되었는지 여부를 알 수 있는 방법은 없습니다.

Windows 10 버전 1709 이상 시스템에서 허용하는 최대 제한 시간 값은 1000밀리초(1초)입니다. LowLevelHooksTimeout 값이 1000보다 큰 값으로 설정된 경우 시스템은 기본적으로 1000밀리초의 시간 제한을 사용합니다.

참고

디버그 후크는 이러한 유형의 하위 수준 마우스 후크를 추적할 수 없습니다. 애플리케이션이 낮은 수준의 후크를 사용해야 하는 경우 작업을 작업자 스레드로 전달한 다음 즉시 반환하는 전용 스레드에서 후크를 실행해야 합니다. 애플리케이션이 낮은 수준의 후크를 사용해야 하는 대부분의 경우 원시 입력을 대신 모니터링해야 합니다. 원시 입력은 낮은 수준의 후크보다 다른 스레드를 대상으로 하는 마우스 및 키보드 메시지를 비동기적으로 모니터링할 수 있기 때문입니다. 원시 입력에 대한 자세한 내용은 원시 입력을 참조하세요.

추가 정보

CallNextHookEx

mouse_event

KBDLLHOOKSTRUCT

MSLLHOOKSTRUCT

SetWindowsHookEx

WM_LBUTTONDOWN

WM_LBUTTONUP

WM_MOUSEMOVE

WM_MOUSEWHEEL

WM_RBUTTONDOWN

WM_RBUTTONUP

후크

후크 정보