Red de conocimiento informático - Material del sitio web - Cómo utilizar la programación VC para implementar el escaneo de versiones del navegador

Cómo utilizar la programación VC para implementar el escaneo de versiones del navegador

#include?"stdafx.h"

#include?"EnumFormVal.h"

#include?

CComModule?_Module;?//?Como desea utilizar un puntero inteligente a?CComDispatchDriver?ATL ///?, debe declararlo

#include??//? Toda la declaración de interfaz IHTMLxxxx

#include?

#ifdef?_DEBUG

#define?new?DEBUG_NEW

#undef ?ESTE_FILE

static?char?ESTE_FILE[]? =?__FILE__;

#endif

/////////////// / ///////////////////////////////////////////////// ///// //////////

/?El?objeto?único?y?único?de?aplicación

usando?espacio de nombres?std

void?EnumIE(?void?);//enumerar funciones del navegador

void?EnumFrame(?IHTMLDocument2?*?pIHTMLDocument2?);?//Enumerar funciones de subtrama

void ?EnumForm(?IHTMLDocument2?*?pIHTMLDocument2?);?//enumerar funciones de formulario

int?_tmain(int?argc,?TCHAR*?argv[],?TCHAR*?envp[ ])

{

::CoInitialize(NULL);?//Inicializar apartamento COM

EnumIE();//enumerar navegador

: :CoUninitialize();?//Liberar el ?COM?apartamento

cout?<

getchar();//esperar el retorno de carro

return?0;

}

void?EnumIE( ?void? )

{

cout?<

CComPtr?spShellWin;

HRESULT?hr?=?spShellWin.CoCreateInstance(?CLSID_ ShellWindows?);

if?(?FAILED?(?hr?) ?)

{ cout?<

}

lon

g?nCount?=?0;?//?Obtener el número de instancias del navegador (Explorer? y?IExplorer)

spShellWin->get_Count(? &nCount?);

if (?0?==?nCount?)

{ cout?<

}

for(int?i=0;?i

{ CComPtr?spDispIE; hr= spShellWin->Item(CComVariant(? (largo) i?),? &spDispIE?); if(?FAILED?(?hr?)?) ?continuar; IWebBrowser2?>?spBrowser?=?spDispIE; ?IDispatch?>?spDispDoc; hr?=?spBrowser->get_Document(? &spDispDoc? ); if(? !spBrowser? )?); if(?FAILED?(?hr?)?)?continuar; ?>?spDocument2?=?spDispDoc; if(? !spDocument2?)?continue; //El programa se ha ejecutado hasta ahora y encontró el comentario que apunta a ?IHTMLDocument2? //Elimine el comentario en la siguiente línea de la declaración. y cambie el fondo del navegador para verlo //spDocument2->put_bgColor(?CComVariant(?" green"?) ?) ; EnumForm(?spDocument2?);?//enumerar todos los formularios

}

}

void?EnumFrame(?IHTMLDocument2?*?pIHTMLDocument2?)

{

if ?(? !pIHTMLDocument2? )?return;

HRESULT?hr;

CComPtr?spFramesCollection2;

pIHTMLDocument2->get_frames(? &spFramesCollection2?);?/ /obtener la colección de fotogramas

long?nFrameCount=0;//obtener el número de subtramas

hr?=?spFramesCollection2->get_length(? &nFrameCount?);

si? (?FAILED?(?hr?)?|?0?==?nFrameCount?)?return;

for(long?i=0;?i

{CComVariant?vDispWin2;?// Obtener la interfaz de automatización de subtramas hr?=?spFramesCollection2->item(? &

;CComVariant(i),? &vDispWin2?); si?(?FAILED?(?hr?)?)?continuar; si(? !spWin2?)? continue;?//obtener la interfaz ?IHTMLWindow2? CComPtr??spDoc2; spWin2->get_document(? &spDoc2?);? Formulario de formulario.

)

}

}

void?EnumForm(?IHTMLDocument2?*?pIHTMLDocument2?)

{

if(? !pIHTMLDocument2?)?return;

EnumFrame(?pIHTMLDocument2?);?// Enumere recursivamente los marcos de subtrama en el IHTMLDocument2 actual"

HRESULT?hr;

CComBSTR?bstrTitle;

pIHTMLDocument2->get_title(? &bstrTitle?);?//obtener el título del documento

USES_CONVERSION;

cout?<

cout?<

cout?<

CComQIPtr?spElementCollection;

hora? =?pIHTMLDocument2->get_forms(?&spElementCollection?);?//get_forms colección

if(?FAILED(?hr?)?)

{ cout?<

}

long?

{ cout?<< ?_T ("Error al obtener el número de formularios")? <

}

for(long?i=0;?i

{ IDispatch?*pDisp?=?NULL;?// Obtener el primer elemento ?i? del formulario hr?=?spElementCollection->item(?CComVariant(?i?),?CComVariant( ), ? &pDisp?); if(?FAILED(?hr?)?) ?continue; CComQIPtr?spFormElement?=?pDisp->Release(); hr?=?spFormElement->get_length(? &nElemCount? ); si?); if(?FAILED(?hr?)?) ?continuar; /p>

CComDispatchDriver?spInputElement;?// Obtener el primer elemento j

Campos de formulario

hr?=?spFormElement->item(?CComVariant(?j?),?CComVariant(),?&spInputElement?);

if(?FAILED(?hr) ?)?) ?continue;

CComVariant?vName,vVal,vType;?// Obtener el ?Nombre, Valor, Tipo del campo del formulario;

hr?=?spInputElement .GetPropertyByName (?L "nombre",? &vName?);

if(?FAILED(?hr?)?) ?continue;

hr?=?spInputElement.GetPropertyByName( ?L "valor",? &vVal?);

if(?FAILED(?hr?)?) ?Continuar;

hr?=?spInputElement.GetPropertyByName(?L " type" ,?&vType?);

if(?FAILED(?hr?)?) Continuar;

LPCTSTR?lpName?=?vName.bstrVal? OLE2CT(?vName. bstrVal? ) ?_T("NULL");?//Nombre de dominio desconocido

LPCTSTR?lpVal?=?vVal.bstrVal? OLE2CT(?vVal.bstrVal?)? );? //Vacío, no ingresado

LPCTSTR?lpType?=?vType.bstrVal? OLE2CT(?vType.bstrVal?)? :?_T("NULL");?//tipo desconocido

cout?<

cout?<submit();

}

}

}

}