Página 1 de 1

Dibujar encima de una página web

Publicado: 17 Ago 2014, 01:56
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?

Re: Dibujar encima de una página web

Publicado: 17 Ago 2014, 18:43
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

Re: Dibujar encima de una página web

Publicado: 18 Ago 2014, 16:01
por Leo
Le echaré un vistazo, parece un poco complicado, gracias :smt023

Re: Dibujar encima de una página web

Publicado: 19 Ago 2014, 18:52
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

Re: Dibujar encima de una página web

Publicado: 19 Ago 2014, 19:16
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

Re: Dibujar encima de una página web

Publicado: 19 Ago 2014, 19:40
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.

Re: Dibujar encima de una página web

Publicado: 29 Ago 2014, 01:05
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.

Re: Dibujar encima de una página web

Publicado: 30 Ago 2014, 00:57
por Dany
PixelGetColor

Re: Dibujar encima de una página web

Publicado: 30 Ago 2014, 01:56
por Leo
Esta sí que funciona :smt038 gracias Dany