Página 1 de 1

Sobre _IECreateEmbedded()

Publicado: 06 Abr 2011, 06:59
por avechuche
Bueno resulta que tengo una duda al respecto de como usar el _IECreateEmbedded() ...
Mediante el comando $oIE = _IECreate($URL), abre IE, entra a la pagina web asignada por "$URL", y desde ahi todo los datos HTML, por ejemplo.
Entro a un foro y necesito el foco en el input donde poner el usuario y luego el pass. Sencillo, con $oSubmit = _IEGetObjById($oIE, $iUsuario) (Donde $iUsuario es el id del input "usuario") tomo el objeto y me mediante, _IEAction($oSubmit, "focus"), le doy el focus y desp con "_IEFormElementSetValue($oSubmit, GUICtrlRead($Input_Usuario))" agrego el usuario, hasta ahi todo bien, pero si lo hago mediante _IECreate.
Resulta que no quiero que me este abriendo IE, quiero crear un GUI que contenga el objeto IE dentro. Por ejemplo:

Código: Seleccionar todo

$oIEe = _IECreateEmbedded()
GUICreate("Example (" & StringTrimRight(@ScriptName, 4) & ")", $Ancho_GUI, $Alto_GUI, -1, -1)
GUICtrlCreateObj($oIEe, 10, 10, $Ancho_GUI - 20, $Alto_GUI - 20)
GUISetState(@SW_SHOW)
$oIE = _IENavigate($oIEe, $URL)
Con eso logro que me cree el objeto IE dentro del GUI y todo muy bien. Ahora el problema

No puedo usar los camandos "_IEGetObjById($oIE, $iUsuario)", por ejemplo. Osea quiero tomar el ID del input "usuario" de la pagina que se abrio en el GUI, pero con eso no me deja. ¿Hay alguna forma de hacerlo?

Mechas gracias!!!

Re: Sobre _IECreateEmbedded()

Publicado: 06 Abr 2011, 16:00
por Chefito
No tienes por que tener ningún tipo de problema al tratar con objetos en el propio internet explorer o un objeto IE indexado. Se hace exactamente igual con idénticos resultados.
Mira este ejemplo adaptado del ejemplo de la función _IECreateEmbedded que trae la ayuda.

Código: Seleccionar todo

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

_IEErrorHandlerRegister ()

$oIE = _IECreateEmbedded ()
GUICreate("Embedded Web control Test", 640, 580, _
		(@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, _
		$WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
$GUIActiveX = GUICtrlCreateObj($oIE, 10, 40, 600, 360)
$GUI_Button_Back = GUICtrlCreateButton("Poner contraseña", 10, 420, 100, 30)
$GUI_Button_Forward = GUICtrlCreateButton("Enviar", 120, 420, 100, 30)
$GUI_Button_Home = GUICtrlCreateButton("Poner Email", 230, 420, 100, 30)

GUISetState()       ;Show GUI

_IENavigate ($oIE, "https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fhl%3Des%26tab%3Dwm%26ui%3Dhtml%26zy%3Dl&bsv=llya694le36z&scc=1&ltmpl=default&ltmplcache=2&hl=es")

; Waiting for user to close the window
While 1
	$msg = GUIGetMsg()
	Select
		Case $msg = $GUI_EVENT_CLOSE
			ExitLoop
		Case $msg = $GUI_Button_Home
			$oEmail=_IEGetObjById($oIE, "Email")
			$oEmail.value="mi_email"
		Case $msg = $GUI_Button_Back
			$oEmail=_IEGetObjById($oIE, "Passwd")
			$oEmail.value="mi_password"
		Case $msg = $GUI_Button_Forward
			$oSubmit=_IEGetObjById($oIE, "signIn")
			_IEAction($oSubmit, "click")
	EndSelect
WEnd

GUIDelete()

Exit
Como puedes ver no hay ningún problema al trabajar con los objetos de la página.
Puedes trabajar con ellos con las funciones que te trae la udf IE, con las que trabajan con los objetos de IE o a través de las funciones que trabajan con los objetos form. También puedes trabajar directamente con los objetos y sus propiedades, métodos y eventos. Para esto tienes que saber algo sobre html dinámico.

Saludos.

Re: Sobre _IECreateEmbedded()

Publicado: 06 Abr 2011, 19:54
por avechuche
Bue ... hace 8 hs no andaba -.- ... reinicie la PC y arranco ... quien sabe ... Muchas gracias! :)

Re: Sobre _IECreateEmbedded()

Publicado: 07 Abr 2011, 03:47
por BasicOs
Chefito escribió:No tienes por que tener ningún tipo de problema al tratar con objetos en el propio internet explorer o un objeto IE indexado. Se hace exactamente igual con idénticos resultados.
Mira este ejemplo adaptado del ejemplo de la función _IECreateEmbedded que trae la ayuda.

Código: Seleccionar todo

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

_IEErrorHandlerRegister ()

$oIE = _IECreateEmbedded ()
GUICreate("Embedded Web control Test", 640, 580, _
		(@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, _
		$WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
$GUIActiveX = GUICtrlCreateObj($oIE, 10, 40, 600, 360)
$GUI_Button_Back = GUICtrlCreateButton("Poner contraseña", 10, 420, 100, 30)
$GUI_Button_Forward = GUICtrlCreateButton("Enviar", 120, 420, 100, 30)
$GUI_Button_Home = GUICtrlCreateButton("Poner Email", 230, 420, 100, 30)

GUISetState()       ;Show GUI

_IENavigate ($oIE, "https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fhl%3Des%26tab%3Dwm%26ui%3Dhtml%26zy%3Dl&bsv=llya694le36z&scc=1&ltmpl=default&ltmplcache=2&hl=es")

; Waiting for user to close the window
While 1
	$msg = GUIGetMsg()
	Select
		Case $msg = $GUI_EVENT_CLOSE
			ExitLoop
		Case $msg = $GUI_Button_Home
			$oEmail=_IEGetObjById($oIE, "Email")
			$oEmail.value="mi_email"
		Case $msg = $GUI_Button_Back
			$oEmail=_IEGetObjById($oIE, "Passwd")
			$oEmail.value="mi_password"
		Case $msg = $GUI_Button_Forward
			$oSubmit=_IEGetObjById($oIE, "signIn")
			_IEAction($oSubmit, "click")
	EndSelect
WEnd

GUIDelete()

Exit
Como puedes ver no hay ningún problema al trabajar con los objetos de la página.
Puedes trabajar con ellos con las funciones que te trae la udf IE, con las que trabajan con los objetos de IE o a través de las funciones que trabajan con los objetos form. También puedes trabajar directamente con los objetos y sus propiedades, métodos y eventos. Para esto tienes que saber algo sobre html dinámico.

Saludos.
Te ha salido un buen minitutorial para la explicación del proceso de uso _IE para enviar el usuario y pass en páginas. :smt038 :smt038 :smt029
Salu22.)

Re: Sobre _IECreateEmbedded()

Publicado: 07 Abr 2011, 15:07
por Chefito
Mmmmm.....minitutorial? No creo. Casi no explico nada :smt016 . Simplemente he respondido un post y he puesto un código de ejemplo.

Si cualquiera que se moleste utiliza el buscador del foro, verá ejemplos de este tipo a montones, y seguro que en muchos de éstos mejor explicados. Como todos sabemos es un tema muy machacado por aquí :smt002 .

Saludos.

Re: Sobre _IECreateEmbedded()

Publicado: 08 Abr 2011, 02:35
por BasicOs
Hay bastantes posts de este tema, pero te salió breve, y lo bueno breve, doblemente bueno. :smt043 :smt043