Cómo utilizar la función HOOK para cerrar la ventana de publicidad de IE
Muchas veces la ventana de publicidad es muy molesta. A continuación he recopilado para usted cómo usar la función HOOK para cerrar la ventana de publicidad de IE. será de ayuda para todos.
1. El cuadro de publicidad emergente también es una ventana de navegación de IE. En términos generales, es una ventana sin menús ni barras de herramientas. Por lo tanto, puede abrir una ventana en el escritorio, primero determinar si el tipo de ventana es "IEFrame" y luego determinar si el tipo de subventana del atributo "WorkerW?" de IEFrame es invisible (esta es una característica general de las ventanas emergentes). ventanas publicitarias), para que pueda enviar un mensaje de cierre a la ventana. Generalmente, los pasos anteriores pueden cerrar automáticamente la mayoría de los cuadros publicitarios emergentes.
2. Resuelva el problema de interceptar mensajes de ventanas abiertas en el escritorio. Función de gancho (HOOK) en la programación de WINDOWS. El principio básico de la función de gancho es registrar algunas acciones en el sistema WINDOWS. Cuando ocurren estos eventos, primero se llama a la función de devolución de llamada. La función de devolución de llamada aquí es implementar 1. La función descrita en. Dado que la función de enlace implementada aquí es monitorear los mensajes generados por otras ventanas de proceso, debe implementarse utilizando una biblioteca de enlaces dinámicos
El principal. El código es el siguiente:
En el enlace dinámico en la biblioteca, se implementa la función de devolución de llamada de enlace.
LRESULT CALLBACK CallWndProc(
int nCode, //Código de enlace
WPARAM wParam, //Indicador de proceso actual
LPARAM lParam / / Dirección de la estructura que contiene los datos del mensaje
)
{
CWPSTRUCT *pCwp = NULL;
CString strClassName;
HWND hWnd = NULL;
ulStyle largo sin firmar = 0;
BOOL bIsClosed = FALSE;
if (nCode < 0)
{
return CallNextHookEx(gHook, nCode, wParam, lParam);
}
if (NULL != lParam)
{
pCwp = (CWPSTRUCT *)lParam;
if (WM_SHOWWINDOW == pCwp-> mensaje)
{
::GetClassName(pCwp->.CompareNoCase("IEFrame"))
{
hWnd = ::GetWindow(pCwp->hwnd, GW_CHILD);
if (NULL == hWnd)
{
bIsClosed = TRUE;
}
while (NULL != hWnd)
{
::GetClassName(hWnd, strClassName.GetBufferSetLength(127), 127);
//Hijos de IEFrame La ventana contiene una ventana de tipo WorkerW
if (0 == strClassName.CompareNoCase("WorkerW"))
{
/ /Si WorkerW no está visible, normalmente es una ventana emergente de publicidad
if (0 == (::GetWindowLong(hWnd, GWL_STYLE) & WS_ VISIBLE))
{
p>bIsClosed = TRUE;
romper;
}
romper;
}
else
{
bIsClosed = TRUE;
}
}PostMessage( pCwp->hwnd, WM_CLOSE, 0, 0);
}
}
}
}
devuelve CallNextHookEx(gHook). , nCode, wParam, lParam) ;
}
En el programa principal, llame a CallWndProc en la DLL.
// Obtener el identificador de la biblioteca de vínculos dinámicos
HINSTANCE hmodHook = GetModuleHandle("CloseWndDll.dll");
If (NULL == hmodHook) p >
{
Devuelve TRUE
}
//Establece la función de enlace
if (NULL == gHook )
{
gHook = SetWindowsHookEx(WH_CALLWNDPROC,
(HOOKPROC)GetProcAddress(hmodHook, "CallWndProc"), hmodHook, 0);
}
Cuando salga el programa principal, tenga en cuenta que se llamará a la función de descarga del gancho.
// Desinstalar la función de enlace
If (NULL ! = gHook)
{
UnhookWindowsHookEx(gHook);
gHook = NULL;
} ;