windows 갈고리
4918 단어 windows
팁: 시스템 수준 갈고리를 설정하려면 갈고리 함수가 DLL에 있어야 합니다.
SetWindowsHookEx(
idHook: Integer; { }
lpfn: TFNHookProc; { }
hmod: HINST; { (EXE、DLL) ; HInstance; 0}
dwThreadId: DWORD { ; GetCurrentThreadId ; 0 }
): HHOOK; { ; 0 }
// idHook :
WH_MSGFILTER = -1; { ; }
WH_JOURNALRECORD = 0; { ; , ; }
WH_JOURNALPLAYBACK = 1; { ; WH_JOURNALRECORD , }
WH_KEYBOARD = 2; { ; }
WH_GETMESSAGE = 3; { ; }
WH_CALLWNDPROC = 4; { ; , SendMessage }
WH_CBT = 5; { ; , : 、 、 、 、 }
WH_SYSMSGFILTER = 6; { ; }
WH_MOUSE = 7; { ; }
WH_HARDWARE = 8; { ; ( 、 ) }
WH_DEBUG = 9; { ; , }
WH_SHELL = 10; { ; }
WH_FOREGROUNDIDLE = 11; { ; }
WH_CALLWNDPROCRET = 12; { ; , SendMessage }
2.이벤트 훅
메시지 갈고리는 응용 프로그램이 시스템 메시지를 처리하기 전에 캡처하고 미리 처리하며 메시지를 계속 전송할지 결정할 수 있다. 일부 윈도우즈 이벤트는 메시지 대응이 없다. 예를 들어 팝업 메뉴, 창 전환, 초점 얻기, 스크롤 바 스크롤 등이다. 이 이벤트를 캡처하려면 SetWin Event Hook을 사용할 수 있다. 그 원형은 다음과 같다.
HWINEVENTHOOK WINAPI SetWinEventHook( __in UINT eventMin, __in UINT eventMax, __in HMODULE hmodWinEventProc, __in WINEVENTPROC lpfnWinEventProc, __in DWORD idProcess, __in DWORD idThread, __in UINT dwflags);
상세한 설명은 MSDN: http://msdn.microsoft.com/en-us/library/dd373640(VS.85).aspx을 보십시오. 그 중에서 네 번째 매개 변수는 메시지 갈고리와 같은 리셋 함수입니다. 설명은 다음과 같습니다. http://msdn.microsoft.com/en-us/library/dd373885(VS.85).aspx.
Win Event Hook의 첫 번째, 두 개의 매개 변수는 하나의 범위를 표시하여 어느 범위의 이벤트를 캡처하는지를 나타낼 수 있다. 실제로 win32에서 이 이벤트의 ID는 defined로 직접 작은 이벤트에서 큰 이벤트로 정의된 것이기 때문에 두 개의 매크로는 각각 가장 작은 이벤트 ID와 가장 큰 이벤트 ID(EVENT MIN과 EVENT MAX)를 나타낸다. 만약에 이 두 개의 매개 변수를 이벤트민과 이벤트맥스에 각각 전달하면 모든 이벤트를 캡처할 수 있다.구체적으로 캡처할 수 있는 이벤트는 MSDN에서 조회할 수 있습니다: http://msdn.microsoft.com/en-us/library/dd318066(VS.85).aspx.
Hook을 중지하려면 다음과 같이 UnhookWinEvent를 호출합니다.
BOOL WINAPI UnhookWinEvent( __in HWINEVENTHOOK hWinEventHook);
3. 양자 차이
(1) SetWindows HookEx에는 두 가지 갈고리 함수가 있는데 하나는 전역 갈고리(global hook), 다른 하나는 스레드 갈고리(thread hook)이다.전역 갈고리는 모든 라인의 정보를 캡처할 수 있지만, 전역 갈고리 함수는 dll에 존재해야 합니다.루틴 갈고리는 현재 프로세스에 속하는 루틴 정보만 캡처할 수 있으며, 갈고리 함수는 dll에 넣을 필요가 없습니다.SetWin EventHook에도 두 가지 갈고리 함수가 있는데 하나는 프로세스 내 갈고리(in-context hook), 다른 하나는 프로세스 외부 갈고리(out-of-context hook)이다.프로세스 내의 갈고리 함수는 dll에 넣어야 하며 모든 프로세스에 비추어야 합니다.프로세스 외부 갈고리 함수는 다른 프로세스에 비치지 않기 때문에 dll에 넣을 필요가 없습니다.프로세스 내나 프로세스 밖의 갈고리를 막론하고 모든 프로세스의 정보를 캡처할 수 있으며, 차이점은 프로세스 내의 갈고리 효율이 더 높다는 것이다.
(2) SetWindowsHookEx와 SetWinEventHook 두 가지 방법으로 캡처한 메시지의 유형이 다르다.SetWindowsHookEx는 모든 WM을 캡처할 수 있습니다첫소식.SetWin EventHook이 캡처한 소식은 모두 EVENT처음에 이 메시지들은 모두 대상의 상태와 관련이 있기 때문에 루트 마우스 키보드와 관련된 정보를 얻을 수 없습니다.
(3) SetWindowsHookEx가 설정한 전역 갈고리는 다른 프로세스에 주입되어야 하기 때문에 제한된 프로세스의 메시지를 캡처할 수 없습니다. 예를 들어 명령줄 창 (console window).SetWin Event Hook의 프로세스 외부 갈고리는 이 제한이 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
제한된 크기의 디렉토리를 만드는 방법오늘 저는 장치에 공간이 없을 때 백업 중에 응용 프로그램이 어떻게 작동하는지 테스트(및 수정)하는 작업이 있습니다. 결과적으로 "남은 공간 없음"오류로 백업이 실패하면 새 파일이 없어야 합니다. 지금까지 문제를 재...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.