마우스 후킹 예제

WH_MSGFILTER 및 WH_SYSMSGFILTER 후크를 사용하면 메인 메시지 루프에서 수행되는 필터링과 동일한 모달 루프 중에 메시지 필터링을 수행할 수 있습니다. 예를 들어 응용 프로그램은 큐에서 메시지를 검색하는 시간과 메시지를 디스패치하는 시간 사이에 주 루프에서 새 메시지를 검사하여 적절한 특수 처리를 수행합니다. 그러나 모달 루프 동안 시스템은 응용 프로그램이 기본 메시지 루프에서 메시지를 필터링할 수 있도록 허용하지 않고 메시지를 검색하고 디스패치합니다. 응용 프로그램이 WH_MSGFILTER 또는 WH_SYSMSGFILTER 후크 프로시저를 설치하는 경우 시스템은 모달 루프 중에 프로시저를 호출합니다. 먼저 동적 링크 라이브러리 프로젝트를 만듭니다. DLL은 “HookMouse”와 “UnHookMouse”의 두 가지 방법을 내보내야 합니다. 당신은 user32.dll 같은 윈도우 스테이션에 다른 모든 프로세스에 syshook.dll을 주입하도록 요청 (dll은 빠른 사용자 전환을 통해 기록 된 다른 사용자의 서비스 및 프로세스에 주입되지 않습니다). 그런 다음 user32.dll은 다른 프로세스의 syshook.dll에 로드 라이브러리를 호출합니다. 그런 다음 함수 MouseHookProc가 호출될 경우, 에서 마우스 메시지를 proccess 프로세스의 컨텍스트에서 호출됩니다. 프로세스가 콘솔 응용 프로그램이 아닌 경우 우리는 키보드 예제를 가지고 같은 코드, 마우스 예제를 할 수 있습니다. 운영 체제 및 소프트웨어는 런타임에 이벤트 후크를 쉽게 삽입할 수 있는 수단을 제공할 수 있습니다.

후크를 삽입하는 프로세스에 충분한 권한이 부여된 경우 사용할 수 있습니다. 예를 들어 Microsoft Windows를 사용하면 대화 상자, 스크롤 막대 및 메뉴뿐만 아니라 다른 항목에 대한 시스템 이벤트 및 응용 프로그램 이벤트를 처리하거나 수정하는 데 사용할 수 있는 후크를 삽입할 수 있습니다. 또한 후크가 키보드 및 마우스 이벤트를 삽입, 제거, 처리 또는 수정할 수 있도록 합니다. Linux는 NetFilter를 통해 커널 내에서 네트워크 이벤트를 처리하기 위해 유사한 방식으로 후크를 사용할 수 있는 또 다른 예제를 제공합니다. 나는 당신이 DLL에 장소 MouseHookProc을 배치 여부를 aksed, EXE 내부에 배치하려고하기 때문에 그것은 전형적인 오류입니다. 나는 또한 몇 년 전에 그것을 했다. 제목 표시줄의 x 단추를 클릭하여 후크를 사용하여 응용 프로그램을 닫을 때 긴 지연이 있습니다. 예를 들어 다른 이벤트 (버튼 클릭)를 통해 응용 프로그램을 닫으면 잘 작동합니다. Codepen.io이 클래스에서 최고의 그래픽 예제를 선택하면 키보드와 마우스를 탭하거나 응용 프로그램이 백그라운드에서 실행되거나 사용자 인터페이스가 전혀 없는 경우에도 해당 작업을 감지할 수 있습니다.

이 클래스는 KeyEventArgs 및 MouseEventArgs를 통해 일반적인 .NET 이벤트를 발생시키므로 필요한 모든 정보를 쉽게 검색할 수 있습니다. 팁: Win32 SDK 도움말 파일을 읽고 PMouseHookStruct 레코드및 HookProc 함수의 서명에 대해 알아보십시오. HookProc은 마우스 관련 메시지를 구문 분석하고 사용자 지정 메시지(“MouseHookMessage”)를 테스트 프로젝트로 보냅니다. WndProc 메서드를 재정의하여 메시지를 받고 필요에 따라 작동합니다: 리버스 엔지니어링 기술을 통해 응용 프로그램이 실행되기 전에 실행 또는 라이브러리의 소스를 수정하면 후킹을 얻을 수도 있습니다. 일반적으로 함수 호출을 가로채 완전히 모니터링하거나 대체하는 데 사용됩니다. HookMouse 프로시저는 첫 번째 매개 변수에 대해 “WH_MOUSE”를 전달하는 SetWindowsHookEx API를 호출하여 마우스 메시지를 모니터링하는 후크 프로시저를 설치합니다. SetWindowsHookEx에 대한 매개 변수 중 하나는 처리 할 마우스 메시지가있을 때 Windows가 호출하는 콜백 기능입니다 : 함수 후킹을 달성하기위한 다른 방법은 래퍼 라이브러리를 통해 함수 호출을 가로 채는 것입니다.

Tento obsah bol zaradený v Nezaradené. Zálohujte si trvalý odkaz.