Dibujar encima de una página web

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
Leo
Mensajes: 9
Registrado: 10 Ago 2014, 17:05

Dibujar encima de una página web

Mensaje por Leo »

Hola, estoy tratando de dibujar encima de una página web con la función_WinAPI_SetPixel o con _WinAPI_BitBlt, el caso que si lo intento encima de una pagina en Mozilla si que se ve o por ejemplo encima del explorador de windows también pero si lo intento en una página de Internet explorer no sale nada. Alguien sabe por que sucede esto?
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Dibujar encima de una página web

Mensaje por Dany »

Podrias hacer algo asi:

Código: Seleccionar todo

#include <GDIPlus.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>

; Modified from <a href='http://www.autoitscript.com/forum/index.php?s=&showtopic=97126&view=findpost&p=698489' class='bbc_url' title=''>http://www.autoitscript.com/forum/index.php?s=&showtopic=97126&view=findpost&p=698489</a>
Opt("MustDeclareVars", 1)
Opt("GUIOnEventMode", 1)

Global $hBitmap, $hGui, $hGraphic, $hImage2, $GuiSizeX = @DesktopWidth, $GuiSizeY = @DesktopHeight
Global $GuiSize = 70, $hWnd, $hDC, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
Global $iX1 = 0, $iY1 = 0, $tPoint, $pPoint, $hBMPBuff, $hGraphicGUI, $hPen, $aMPos, $aMPosNew
Global $iOpacity = 255, $dll = DllOpen("user32.dll")

GUISetOnEvent(-3, "_Exit")
OnAutoItExitRegister("_Exit")



Main()

Func Main()

	$hGui = GUICreate("L1", $GuiSizeX, $GuiSizeY, -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST))
	GUISetState(@SW_SHOW, $hGui)
	_GDIPlus_Startup()
	$hWnd = _WinAPI_GetDC(0)
	$hDC = _WinAPI_CreateCompatibleDC($hWnd)
	$hBitmap = _WinAPI_CreateCompatibleBitmap($hWnd, $GuiSizeX, $GuiSizeY)
	_WinAPI_SelectObject($hDC, $hBitmap)
	$hGraphic = _GDIPlus_GraphicsCreateFromHDC($hDC)
	$hBMPBuff = _GDIPlus_BitmapCreateFromGraphics($GuiSizeX, $GuiSizeY, $hGraphic)
	$hGraphicGUI = _GDIPlus_ImageGetGraphicsContext($hBMPBuff)

	_GDIPlus_GraphicsClear($hGraphic)
	$hPen = _GDIPlus_PenCreate(0xffff0000, 10)

	$tSize = DllStructCreate($tagSIZE)
	$pSize = DllStructGetPtr($tSize)
	DllStructSetData($tSize, "X", $GuiSizeX);$iWidth )
	DllStructSetData($tSize, "Y", $GuiSizeY);$iHeight)
	$tSource = DllStructCreate($tagPOINT)
	$pSource = DllStructGetPtr($tSource)
	$tBlend = DllStructCreate($tagBLENDFUNCTION)
	$pBlend = DllStructGetPtr($tBlend)
	DllStructSetData($tBlend, "Alpha", $iOpacity)
	DllStructSetData($tBlend, "Format", 1)
	$tPoint = DllStructCreate($tagPOINT); Create point destination structure here
	$pPoint = DllStructGetPtr($tPoint); Create pointer to this dll data structure, $pPTDest parameter
	DllStructSetData($tPoint, "X", $iX1)
	DllStructSetData($tPoint, "Y", $iY1)
	_WinAPI_UpdateLayeredWindow($hGui, $hWnd, $pPoint, $pSize, $hDC, $pSource, 0, $pBlend, $ULW_ALPHA)

	Do
		While _IsPressed("01", $dll)
			$aMPos = MouseGetPos()
			_GDIPlus_GraphicsDrawLine($hGraphic, $aMPos[0], $aMPos[1],$aMPos[0]+1, $aMPos[1]+1, $hPen)
			_WinAPI_UpdateLayeredWindow($hGui, $hWnd, 0, $pSize, $hDC, $pSource, 0, $pBlend, $ULW_ALPHA)
		WEnd

		Sleep(50)
	Until _IsPressed("1B", $dll); ESC key

EndFunc   ;==>Main

Func _Exit()
	DllClose($dll)
	_GDIPlus_PenDispose($hPen)
	_GDIPlus_GraphicsDispose($hGraphicGUI)
	_GDIPlus_GraphicsDispose($hGraphic)
	_WinAPI_ReleaseDC(0, $hWnd)
	_WinAPI_DeleteObject($hBitmap)
	_WinAPI_DeleteDC($hDC)
	_GDIPlus_Shutdown()
	GUIDelete($hGui)
	Exit
EndFunc   ;==>_Exit
saludos
  • ............................................Imagen
    ......................................Imagen
Leo
Mensajes: 9
Registrado: 10 Ago 2014, 17:05

Re: Dibujar encima de una página web

Mensaje por Leo »

Le echaré un vistazo, parece un poco complicado, gracias :smt023
qpongo
Hacker del Foro
Mensajes: 110
Registrado: 10 Abr 2013, 15:53
Ubicación: Madrid

Re: Dibujar encima de una página web

Mensaje por qpongo »

Veo que se puede hacer casi de todo con Autoit.....

Pero veo que sigue siendo bastante desconocido o que cuando se compara con otros lenguajes es como el menos "listo" de la familia. A mi sin embargo me alucina... ¿será que no entiendo?

Por cierto, :smt045 ¡Cuanto sabe Dany! Tiene respuesta para todo :smt001

Un saludo,

qpongo
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Dibujar encima de una página web

Mensaje por Dany »

Si. lo que pasa es que le tienen resentimiento a todos los lenguajes Basic. y a los que no soporta POO los toman por obsoletos.

Saludos
  • ............................................Imagen
    ......................................Imagen
qpongo
Hacker del Foro
Mensajes: 110
Registrado: 10 Abr 2013, 15:53
Ubicación: Madrid

Re: Dibujar encima de una página web

Mensaje por qpongo »

Es probable que sea eso sí. Ya te contaré que opino cuando sepa algo de POO.
Ahora mismo no entiendo bien cual es la diferencia o la ventaja, pero creo que aprenderé algo de Phyton que he leído es bastante asequible y cuando lo entienda en la práctica me posicionaré. Pero en principio no entiendo porqué elegir uno en vez de otros... cuando se puede elegir el mejor dependiendo de las necesidades.
Parece que Autoit es mejor para manejar ventanas y automatizar muchas cosas fácilmente.
Saludos.
Leo
Mensajes: 9
Registrado: 10 Ago 2014, 17:05

Re: Dibujar encima de una página web

Mensaje por Leo »

Por cierto, volviendo al tema, veo que la función _WinAPI_GetPixel tampoco funciona en IE, ¿hay alguna función sencilla que funcione para capturar el color un punto?, la función _ScreenCapture_Capture si que funciona pero luego hay que acceder al bitmap con _GDIPlus_BitmapGetPixel, parece un poco rebuscado.
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Dibujar encima de una página web

Mensaje por Dany »

PixelGetColor
  • ............................................Imagen
    ......................................Imagen
Leo
Mensajes: 9
Registrado: 10 Ago 2014, 17:05

Re: Dibujar encima de una página web

Mensaje por Leo »

Esta sí que funciona :smt038 gracias Dany
Responder