2011-12-26 13 views
9

Nie mam pojęcia, jak haki okienne działają na "poziomie systemu". MSDN dotyka tylko to, co dzieje się na bardzo krótko:Haki do okien - jak one działają?

Hak jest punkt w mechanizmie System wiadomość obsługi gdzie aplikacja można zainstalować podprogram do monitorowania ruchu wiadomość w typy systemów i procesów pewne wiadomości zanim osiągną procedurę docelowego okna .

Mój najlepszy przypuszczenie jest coś takiego jak poniżej:

enter image description here

Przed każda wiadomość jest dodawany do kolejki komunikatów dla okna, to będzie najpierw wysłać wiadomość do globalnych/local haków, które mogą coś zrobić, w zależności od ich procedur hakowania. Po wszystkich hakach globalnych i lokalnych przechwytaniach wiadomość jest ostatecznie dodawana do kolejki komunikatów okna.

Jednak MSDN mówi, że dla niektórych typów haków, będzie monitorować events, notifications itp

Przykładem jest haczyk WH_MOUSE_LL:

Instaluje procedura haka, który monitoruje nisko- poziom mysz zdarzenia wejściowe. Aby uzyskać więcej informacji, zobacz procedurę LowLevelMouseProc hook .

Kiedy mówią: events, czy mówimy wiadomości w oknie, czy też mają na myśli coś innego?

Czy wszystko jest źle?

+8

Punkty premiowe za wizerunek odręcznego diagramu. – rkb

+1

Oto małe wyjaśnienie http://b.1asphost.com/mmbaig/Tutorials/Windows_Hooks.html –

+2

Wiele haczyków bazuje na komunikatach. Ale nie o haczyku, o którym mówisz, jest ono faktycznie wyzwalane przez "wydarzenie". Działa tylko * przed * Windows tworzy wiadomość i umieszcza ją w kolejce komunikatów okna, na którym jest fokus. Porównaj z WH_MOUSE, globalnym hakiem, który działa, gdy aplikacja wywołuje Get/PeekMessage i ma zamiar pobrać komunikat myszy z kolejki komunikatów. Tak naprawdę jest wyzwalany przez wiadomość. –

Odpowiedz

1

Tak, jest to mechanizm wiadomości systemu Windows, można przetwarzać te dane (wiadomości), zanim dotrą one do procedury okna docelowego (pętla komunikatów).

Jeśli chcesz podłączyć inne okna procesu, możesz to zrobić po prostu w DLL i użyć wtrysku DLL do wstrzyknięcia twojej biblioteki do innego procesu.