Trabajando con los Event functions.....

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
markus
Mensajes: 28
Registrado: 02 Abr 2010, 21:28

Trabajando con los Event functions.....

Mensaje por markus »

Un saludo a todos los programadores en Autoit.....
En esta oportunidad quiero aperturar este tema para ver si aportamos informacion sobre los eventos que se producen cuando utilizamos Internet Explorer. Se agradece en español por favor......
En esta oportunidad publicare algo que me pareció interesante referente al evento DWebBrowserEvents el cual posee 14 propiedades manejables que de paso le indico que segun MSDN ya esta obsoleto y su actualización lleva por nombre DWebBrowserEvents2 el cual posee 38 propiedades o argumentos con los cuales poder trabajar. En los siguientes links podran accesar a esa información para DWebBrowserEvents (http://msdn.microsoft.com/en-us/library ... 85%29.aspx) y para DWebBrowserEvents2 (http://msdn.microsoft.com/en-us/library ... 85%29.aspx)
En el siguiente código (adquirido de nuestros compañerosgringos) podemos observar su implementación.

Código: Seleccionar todo

; Script ejemplo para mostrar el uso del COM Event functions.
; Requiere la ultima versión de AutoIt beta 3.1.1.104 !

dim $odoc

; Usaremos un GUI muy simple para mostrar los resultados de los eventos.
#include "GUIConstants.au3"
$GUIMain=GUICreate            ( "Event Test",      600,500 )
$GUIEdit=GUICtrlCreateEdit    ( "Test Log:" & @CRLF,  10, 20, 580, 400)
$GUIProg=GUICtrlCreateProgress  (                      10,  5, 580,  10)
$GUIExit=GUICtrlCreateButton    ( " Close ",          250, 450, 80,  30)
GUISetState ()    ;Muestro el GUI

; Preparamos el IE para las pruebas
$oIE=ObjCreate("InternetExplorer.Application.1")
With $oIE
    .Visible=1
    .Top = (@DesktopHeight-400)/2
    .Height=400     ; Make it a bit smaller than our GUI.
    .Width=600
    .Silent=1         ; No mostrarDon't show IE's dialog boxes
    $IEWnd=HWnd(.hWnd) ; Remember the Window, in case user decides to close it
EndWith

; We choose for a specific Internet Explorer interface 'DWebBrowserEvents' because the IE is subject
; to modifications by e.g. Visual Studio and Adobe Acrobat Reader. If you have IE-plugins installed, 
; AutoIt might not be able to find the correct interface automatically.
$EventObject=ObjEvent($oIE,"IEEvent_","DWebBrowserEvents")
if @error then 
   Msgbox(0,"AutoIt COM Test", _ 
    "ObjEvent: Can't use event interface 'DWebBrowserEvents'. Error code: " & hex(@error,8))
   exit
endif

; Iniciamos una pagina web de prueba.
$URL = "http://www.autoit.com"
$oIE.Navigate( $URL )          
sleep(1000)         ; Give it some time to load the web page

GUISwitch ( $GUIMain ) ; Switch back to our GUI in case IE stealed the focus

; Waiting for user to close the GUI.
While 1
   $msg = GUIGetMsg()
   If $msg = $GUI_EVENT_CLOSE or $msg = $GUIExit Then ExitLoop
Wend

$EventObject.Stop  ; Tell IE we don't want to receive events.
$EventObject=0   ; Kill the Event Object
If WinExists($IEWnd) then $oIE.Quit ; Close IE Window
$oIE=0           ; Remove IE from memory (not really necessary).

GUIDelete ()       ; Remove GUI

exit               ; End of our Demo.

; A few Internet Explorer Event Functions
; See also: [url="http://msdn.microsoft.com/workshop/browser/webbrowser/reference/objects/webbrowser.asp"]http://msdn.microsoft.com/workshop/browser.../webbrowser.asp[/url]

Func IEEvent_BeforeNavigate($URL, $Flags, $TargetFrameName, $PostData, $Headers, $Cancel)
;   Note: the declaration is different from the one on MSDN.
    GUICtrlSetData ( $GUIEdit, "BeforeNavigate: " & $URL & " Flags: " & $Flags & " tgframe: " & $TargetFrameName & " Postdat: " & $PostData & " Hdrs: " & $Headers & " canc: " & $Cancel  & @CRLF  , "append" )

EndFunc

Func IEEvent_ProgressChange($Progress,$ProgressMax)
    If $ProgressMax > 0 Then
        GUICtrlSetData($GUIProg, ($Progress * 100) / $ProgressMax )
    EndIf
EndFunc

Func IEEvent_StatusTextChange($Text)
    GUICtrlSetData ( $GUIEdit, "IE Status text changed to: " & $Text & @CRLF  , "append" )
EndFunc

Func IEEvent_PropertyChange( $szProperty)
    GUICtrlSetData ( $GUIEdit, "IE Changed the value of the property: " & $szProperty & @CRLF  , "append" )
EndFunc

Func IEEvent_DownloadComplete()
    GUICtrlSetData ( $GUIEdit, "IE has finished a navigation operation" & @CRLF  , "append" )
    $odoc=objcreate("IHtmlDocument2")
    $oDoc= $oIE.document
    $EventDoc=ObjEvent($oDoc,"Document_","HTMLDocumentEvents2")

EndFunc

Func Document_OnMouseOver($e)  
; This is an optional event function to catch non-defined events. 
; The parameter contains the name of the event being called.
    GUICtrlSetData ( $GUIEdit, "Doc mouseover" & @CRLF  , "append" )
EndFunc 

Func IEEvent_NavigateComplete($URL)  
;   Note: the declaration is different from the one on MSDN.
    GUICtrlSetData ( $GUIEdit, "IE has finished loading URL: " & $URL & @CRLF  , "append" )
EndFunc

Func IEEvent_($EventName)  
; This is an optional event function to catch non-defined events. 
; The parameter contains the name of the event being called.
    GUICtrlSetData ( $GUIEdit, "Uncatched event: " & $EventName & @CRLF  , "append" )
EndFunc
Este script a mi me funciona perfectamente en la version IE 7 pero no se en las demas.

Como pudieron observar, se trabajo con los eventos:

IEEvent_BeforeNavigate($URL, $Flags, $TargetFrameName, $PostData, $Headers, $Cancel)
IEEvent_ProgressChange($Progress,$ProgressMax)
IEEvent_StatusTextChange($Text)
IEEvent_PropertyChange( $szProperty)
IEEvent_DownloadComplete()
Document_OnMouseOver($e)
IEEvent_NavigateComplete($URL)
IEEvent_($EventName)


Espero que les halla causado un poco de curiosidad para hacerle modificaciones a este script. En el siguiente link esta una de sus publicaciones en nuestra web compañera gringa. el script lleva por titulo Spy on Internet Explorer Webbrowser y lo podemos ver aqui: http://www.autoitscript.com/forum/index ... opic=66147

Yo por mi parte me quedo la duda de como trabajar con el evento IEEvent_BeforeNavigate($URL, $Flags, $TargetFrameName, $PostData, $Headers, $Cancel)

Cuando el GUI me muestra los resultados de este evento, busco el $PostData y el $headers, lo que me muestra es el número cabeceras pero no se como ver la información tanto recibida como enviada a traves del metodo POST.

Si alguien podria explicarmelo por favor se lo agradeceria....

Un saludo cordial a todos...
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Trabajando con los Event functions.....

Mensaje por Chefito »

markus escribió:Espero que les halla causado un poco de curiosidad para hacerle modificaciones a este script. En el siguiente link esta una de sus publicaciones en nuestra web compañera gringa. el script lleva por titulo Spy on Internet Explorer Webbrowser y lo podemos ver aqui: http://www.autoitscript.com/forum/index ... opic=66147
Este script está en la ayuda de AutoIt :smt002 .
markus escribió:En esta oportunidad publicare algo que me pareció interesante referente al evento DWebBrowserEvents el cual posee 14 propiedades manejables que de paso le indico que segun MSDN ya esta obsoleto y su actualización lleva por nombre DWebBrowserEvents2 el cual posee 38 propiedades o argumentos con los cuales poder trabajar
Jejejeje....sí, tienes razón, el DWebBrowserEvents ya está obsoleto. Yo lo utilizo por mala constumbre, ya que siempre he trabajado con el en vb6 y los ejemplos de la ayuda en AutoIt están con DWebBrowserEvents. DWebBrowserEvents ofrece compatibilidad con todos los IE, aunque no es excusa ya que DWebBrowserEvents2 lleva desde la versión 4 del IE :smt005 . A ver si me acostumbro a utilizarlo :smt003 .

Por lo que he visto utilizando el registro de la página de hotmail, lo que te devuelve $postdata es la información enviada en forma hexadecimal, tipo 0x234234234345342423564564a33d........... . Para poder ver esto en forma ascii es convertirlo a éste. Con una simple función se puede hacer:

Código: Seleccionar todo

Func IEEvent_BeforeNavigate($URL, $Flags, $TargetFrameName, $PostData, $Headers, $Cancel)
;   Note: the declaration is different from the one on MSDN.
	If StringLen($postdata)>0 Then
		$postdata=StringRight($postdata,stringlen($postdata)-2)
		$txtpost=""
		For $n=1 to StringLen($postdata) Step 2
			$txtpost=$txtpost & Chr("0x" & StringMid($postdata,$n,2))
		Next
		ConsoleWrite($txtpost & @CRLF)
	EndIf
EndFunc
Esto te muestra los datos enviado (no los recibidos) por el método post y los vuelva a la consola del scite. Lo he probado con el registro de nuestro foro y del hotmail y funciona bien.
Hay otros métodos y otras librerías para conseguir cabeceras y datos enviados (supongo que recibidos también) por el método post. Tengo una ligera idea de cuales son, pero tendría que mirarlo un poquito ya que es algo que no utilizo y se olvida. A ver si después de hacer algo de ejercicio me pongo un poco :smt003 .

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
markus
Mensajes: 28
Registrado: 02 Abr 2010, 21:28

Re: Trabajando con los Event functions.....

Mensaje por markus »

Chefito escribió:Este script está en la ayuda de AutoIt :smt002 .
Yo se que esta en la ayuda de Autoit pero la corte y pegue tal cual esta alli y no hace nada.

Probe el script y me funciona bien pero me tengo una duda. El dato lo muestra pero mirando mas detalladamente el formulario sobre el cual quiero actuar es este

<form autocomplete="off" onsubmit="return validarDatos()" id="Inicio" action="inicio.aspx?forms=wfc&Form=01" method="post" name="Inicio">

resulta ser que este form se carga dentro de un Frame. yo introduzco cualquier dato de usuario y un pass cualquiera y no me captura nada.

Cuando comparo este Form con el Form de hotmail se ven las diferencias.

<form name="f1" method="POST" target="_top">

Mi pregunta es ¿tiene algo que ver el parámetro Action? :smt017

Otra cosa, el liveHttpheaders me captura bien esos datos y me los muestra a continuación del "__VIEWSTATE"
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Trabajando con los Event functions.....

Mensaje por Chefito »

Que yo sepa el parámetro action no tiene nada que ver con esto.
No se no se....puede que al estar en un frame no lea estos datos. Recuerda que en un frame (marco) se puede cargar una página. Mira a ver que página carga en ese frame y ejecutala tu directamente sin frame. Seguramente ya te captura todo.....digo yo.
markus escribió:Otra cosa, el liveHttpheaders me captura bien esos datos y me los muestra a continuación del "__VIEWSTATE"
no conozco esto. Lo he buscado en google y parece un programa.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Responder