Detectar apertura y cierre de aplicaciones (Hook de mensajes)
Documentación de la DLL "dscbtshl.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 CBT y/o Shell a nivel de thread o de todo el sistema y obtener el nombre del ejecutable para cualquier ventana de la pantalla.
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 SetCBTSHLHook(), tanto para un thread como para el sistema, se instala un hook para los mensajes WH_CBT y/o WH_SHELL.
Si las funciones hook encuentran un mensaje, la DLL enviará una copia del mismo a una o dos funciones públicas en tu aplicación, con el siguiente prototipo :
Public Function myFunction&(ByVal hwnd&, ByVal ncode&)
ncode te informa acerca de la actividad detectada
hWnd es el handle de la ventana
La función GetFileName() instala un hook temporal para WH_GETMESSAGE y determina el path del ejecutable que ha creado la ventana hWnd.
FUNCIONES
SetCBTSHLHook
Declaración :
Declare Function SetCBTSHLHook& Lib "dscbtshl" (ByVal Hook&, ByVal cbtAdr&, ByVal shlAdr&)
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 pertenece la ventana.
- cbtAdr : Dirección de la función callback de tu aplicación que será llamada para recibir una copia del mensaje CBT. Se pasará mediante AddressOf. Dicha función debe estar en un módulo y ser del siguiente tipo :
Public Function CBTFunction&(ByVal hwnd&, ByVal ncode&)
NOTA: Si no necesitas este tipo de hook, pon como parámetro 0& (cero) y no necesitarás implementar la función.
- shlAdr : Dirección de la función callback de tu aplicación que será llamada para recibir una copia de los mensajes SHELL. Se pasará mediante AddressOf y debe estar en un módulo y ser del siguiente tipo :
Public Function SHLFunction&(ByVal hwnd&, ByVal ncode&)
NOTA:Si no necesitas este tipo de hook, pon como parámetro un 0& (cero) y no necesitarás implementar la función.
Valor de retorno
1 (true), si el hook se instala correctamente, en otro caso 0 (false)
GetFileName
Declaración :
Declare Function GetFileName& Lib "dscbtshl" (ByVal hwnd&, ByVal FileName$)
Parámetros :
- hwnd : Handle de la ventana cuyo creador (exe, dll) quieres determinar.
- FileName : Variable de tipo string que recojerá el nombre del ejecutable. Debe estar inicializada con la suficiente longitud. Ejemplo :
Dim FName As String, slong As Long
FName = String(260, 0)
slong = GetFileName(hwnd, FName)
FName = Left$(FName, slong)
Valor de retorno
-3, cuando el hook para obtener el nombre no se pudo instalar
-2, cuando el parámetro hwnd es inválido
-1, cuando la función estaba todavía ocupada cuando se la llama
Cuando todo va bien retorna la longitud del nombre copiado en FileName
Delphin Software
Mail: delphinsoft@gmx.de
Phone: +49 0725118671
Fax: +49 07251989773
Traducción libre por José Rubí
dscbtshl.zip
Trucos
Página de Visual Basic
Página principal
