Soy la creación de un bajo nivel gancho de ratón con SetWindowsHookEx
:¿En qué hilo se ejecuta una devolución de llamada de enganche de mouse y teclado de bajo nivel?
HANDLE handle = SetWindowsHookEx(WH_MOUSE_LL,
&callback,
GetModuleHandle(NULL),
NULL);
Debido a que esta es una devolución de llamada de bajo nivel, que se ejecutará dentro de mi propio proceso; no se realiza una inyección DLL.
Ahora, me he dado cuenta de que la devolución de llamada a veces (indirectamente) se invoca desde las funciones estándar de API como GetAncestor
, GetWindowRect
y tal. Parece que estos pueden hacer que se vacíe algo de la cola de mensajes.
En realidad, mi pregunta es triple ...
Cuando se llama la devolución de llamada?
¿Se puede llamar desde adentro cualquiera función API? ¿Cómo lo digo?
Por lo que el hilo se ejecuta la devolución de llamada?
Será solamente se ejecutan en el hilo que instala el gancho, o puede llamar al sistema en cualquier tema?
¿Por qué ganchos implementados como una devolución de llamada en el primer lugar?
(no Raymond Chen colgar por aquí?) Sería mucho más sentido para mí para poner en práctica simplemente como ganchos (enviado) los mensajes, al igual que casi todo el resto de Windows. Para los mensajes, por lo menos sé qué funciones puede causar la espera de los mensajes enviados para ser procesados (
GetMessage
,PeekMessage
y un puñado de otros), y me gustaría saber en qué hilo se procesan (el hilo que recibió el mensaje en primer lugar) .
Si me disculpan, golpearé mi cabeza contra la pared por un tiempo. Muchas gracias! – Thomas
Mi pregunta sería "¿por qué tienen un comportamiento diferente para WH_MOUSE_LL vs. WH_MOUSE?" (uno requiere un dll, se ejecuta en el hilo de aplicaciones, uno puede funcionar en un exe, en su propio hilo) como ... ¿es esto para que sea más fácil para nosotros, pero solo es para esos eventos en particular, eh? – rogerdpack
@rogerdpack: que en su mayoría no está relacionado con el problema original, debe publicar su propia pregunta al respecto. –