Añadir un menú a otra aplicación (Hook de mensajes)
Documentación de la DLL "dscwpmsg.dll" (c) 2001 by J. Thuemmler, Delphin Software
Esta DLL es gratuita y no tiene garantía.
PROPÓSITO DE LA DLL
Instalar un hook para WH_CALLWNDPROC y/o WH_GETMESSAGE a nivel de thread o de todo el sistema.
Para usar esta dll, cópiala en la carpeta de tu proyecto, no en el directorio system(32).
CÓMO FUNCIONA
Cuando llamas a la función SetCWPMSGHook(), tanto para un thread como para todo el sistema, se instala un hook para los mensajes WH_CALLWNDPROC y/o WH_GETMESSAGE.
Si las funciones hook encuentran un mensaje, la DLL enviará una copia del mismo a una o dos funcione públicas en tu aplicación, con el siguiente prototipo :
Public Function Callback& (ByVal hwnd&, ByVal msg&, ByVal wParam&, ByVal lParam&)
Los parámetros son una copia del mensaje original
El hook WH_CALLWNDPROC monitoriza los mensajes enviados empleando SendMessage() a la ventana hwnd; el hook WH_GETMESSAGE monitoriza los mensajes recuperados de la cola de mensajes de la aplicación empleando GetMessage() o PeakMessage().
Puedes definir hasta 10 mensajes globales para ser descartados por los hooks, empleando la función SetGlobalMessage&().
Puedes definir hasta 10 identificadores de ventana y por cada uno hasta 10 mensajes para ser descartados, empleando las funciones SetMessageWindow&() y SetWindowMessage&().
En principio puedes usar esta DLL para monitorizar tu propia aplicación, pero esta tarea suele hacerse mejor usando tus propias llamadas a SetWindowsHookEx() e implementando tus propias funciones de hook porque en este caso obtendrías los mensajes originales y podrías modificarlos.
¡¡¡ ATENCIÓN !!!
Si usas mal esta DLL es fácil que tu sistema se caiga. Debes estar familiarizado con el API de Windows cuando uses los hooks. Aunque sólo obtienes una copia de los mensajes originales, debes evitar emplear mucho tiempo de proceso en las fucniones callback, sobre todo cuando instales el hook para todo el sistema.
FUNCIONES
SetCWPMSGHook
Declaración :
Declare Function SetCWPMSGHook& Lib "dscwpmsg" (ByVal Hook&, ByVal AdrCWP&, ByVal AdrMSG&)
Parámetros:
- Hook : Si vale -1 se instalará el hook para todo el sistema, si vale 0 se desinstalará y si es el hwnd de una ventana se instalará para el thread al que pertenezca dicha ventana.
Cuando instales un hook de sistema, los mensajes de tu propio thread no te llegarán para evitar llamadas recursivas.
- AdrCWP : Dirección de la función callback de tu aplicación, la cual será llamada para recibir las copias de los mensajes CWP. Esta dirección se pasará empleando AddressOf.
La función debe estar en un módulo y ser del siguiente tipo :
Public Function CWPFunction& (ByVal hwnd&, ByVal msg&, ByVal wParam&, ByVal lParam&)
NOTA:
Si no necesitas este tipo de hook pon como parámetro 0& (cero) y no necesitarás implementar la función.
Si necesitas el hook para descartar mensajes pero sin ningún callback, pon 1& como parámetro y tampoco necesitas implementar la función.
- AdrMSG: Dirección de la función callback de tu aplicación que recibirá las copias de los mensajes MSG. Esta dirección se pasará empleando AdressOf. La funcion debe estar en un módulo y ser del siguiente tipo :
Public Function MSGFunction& (ByVal hwnd&, ByVal msg&, ByVal wParam&, ByVal lParam&)
NOTA:
Si no necesitas este tipo de hook pon como parámetro 0& (cero) y no necesitarás implementar la función.
Si necesitas el hook para descartar mensajes pero sin ningún callback, pon 1& como parámetro y tampoco necesitas implementar la función.
Valores de retorno
2 , si se instalan los dos hooks satisfactoriamente.
1 , si se instala un hook satisfactoriamente.
0 , en otro caso.
SetGlobalMessage
Declaración :
Declare Function SetGlobalMessage& Lib "dscwpmsg" (ByVal Msg&, ByVal wParam&)
Parámetros:- Msg : El mensaje que será descartado por los hooks.
- wParam : Algún valor con sentido para el mensaje ( por ejemplo WM_SYSCOMMAND, SC_CLOSE) o 0 (cero).
Valor de retorno
1 (True), si el número de mensajes es menor o igual que 10, 0 (false) en otro caso.
SetMessageWindow
Declaración :
Declare Function SetMessageWindow& Lib "dscwpmsg" (ByVal hwnd&)
Parámetros : - hwnd : handle de la ventana para la que descartar los mensajes.
Valor de retorno
Un índice de 0 a 9 cuando el número de ventanas es menor o igual que 10, en otro caso -1.
SetWindowMessage
Declaración :
Declare Function SetWindowMessage& Lib "dscwpmsg" (ByVal Index&, ByVal messg&, ByVal wParam&)
Parámetros : - Index : El valor devuelto poe la función "SetMessageWindow&()" que identifica la ventana.
- messg : Mensaje que será descartado para la ventana especificada.
- wParam : Cualquier valor con sentido para el mensaje (por ejemplo WM_SYSCOMMAND, SC_CLOSE) o 0 (cero).
Valor de retorno
1 (true) si el número de mensajes para la ventana es menor o igual que 10, en otro caso 0 (false).
Delphin Software
Mail: delphinsoft@gmx.de
Phone: +49 07251 18671
Fax: +49 07251 989773
Traducción libre por José Rubí
dscwpmsg.zip
Trucos
Página de Visual Basic
Página principal
