Página 1 de 1

Re: Macro clicks sobre objeto de color

Publicado: 31 Ene 2009, 19:32
por Nahuel
Yo hice para el otro foro una aplicación para ese propósito. Con Pausa se congela y con Insertar copia el código hexagesimal en el portapapeles. Tiene una lupa para ver mejor el área.
Pixel Color V2.ENG.exe.zip
(246.62 KiB) Descargado 440 veces
No te paso el código fuente porque es muy viejo y hay que hacerle muchas modificaciones.

Re: Macro clicks sobre objeto de color

Publicado: 31 Ene 2009, 22:47
por gna08
Uh nahuel, k tal, vi tu programa k subiste, keria sber si no me donas el codigo, aunqque alla k cambiar algunas cosas, o si no las parte de la lupa :), k magnifica, es para un proyecto distinto, bueno gracias! :smt006

Re: Macro clicks sobre objeto de color

Publicado: 01 Feb 2009, 21:45
por Nahuel
Seguro. Estaba aburrido y lo arreglé para que funcione con la última versión de Autoit. Me olvidé mencionar que también tiene función para mover el cursor con las flechas. Shift+flechas mueve más rápido.

El código:

Código: Seleccionar todo

#include <GUIconstants.au3>
#include <Staticconstants.au3>
#include <Windowsconstants.au3>
#include <Editconstants.au3>
#include<Misc.au3>
#NoTrayIcon

Opt("WinTitleMatchMode", 4)
Opt("WinWaitDelay", 0)
Opt("GUIonEventMode",1)

;~ Global $SRCCOPY = 0x00CC0020
Global $leave = 0
Global $Paused=0
$MouseModifier = 1
$PressedTime = 1

HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{INS}", "_copyHEX")

Tooltip("AU3MAG", 0, 0,"","",4)
$MyhWnd = WinGetHandle("classname=tooltips_class32")


GUICreate("Pixel Color", 180, 410,0, 0, -1, $WS_EX_TOPMOST)
GUISetOnEvent($GUI_EVENT_CLOSE,"_exit")

GUICtrlCreateGroup(" Mouse coords ", 10, 10, 160, 50)
GUICtrlCreateLabel("X:", 25, 33, 15, 15)
$MousePosX=GUICtrlCreateInput("", 40, 30, 40, 20, $ES_READONLY)
GUICtrlCreateLabel("Y:", 90, 33, 15, 15)
$MousePosY=GUICtrlCreateInput("", 105, 30, 40, 20, $ES_READONLY)

GUICtrlCreateGroup(" Color codes ", 10, 70, 160, 110)
GUICtrlCreateLabel("Decimal:", 25, 93, 50, 15)
$PixelColor=GUICtrlCreateInput("", 80, 90, 70, 20, $ES_READONLY)
GUICtrlCreateLabel("Hex:", 25, 123, 50, 15)
$hexColor=GUICtrlCreateInput("", 80, 120, 70, 20,$ES_READONLY)
GUICtrlCreateLabel("Color:", 25, 153, 50, 15)
$MostrarColor=GUICtrlCreateLabel("", 80, 150, 70, 20,$ES_READONLY)

GUICtrlCreateGroup(" Special options ", 10, 190, 160, 145)
$RB_Full = GUICtrlCreateRadio("Full Screen", 25, 210, 100, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
$RB_Window = GUICtrlCreateRadio("Active Window", 25, 230, 100, 20)
$Mag= GUICtrlCreateCheckbox("Magnify", 25, 250, 100, 20)
$Solid= GUICtrlCreateRadio("Solid crosshair", 35, 270, 100, 20)
$Inver= GUICtrlCreateRadio("Inverted crosshair", 35, 290, 120, 20)
$KeyBMouse= GUICtrlCreateCheckbox("Move cursor with keyb.", 25, 310, 140, 20)

$Ayuda=GUICtrlCreateButton("Help",10,345,77)
GUICtrlSetOnEvent(-1,"Ayuda")
$Saltar=GUICtrlCreateButton("Jump to",92,345,77)
GUICtrlSetOnEvent(-1,"Saltar")

GUICtrlCreateLabel("PAUSE: Freeze/Unfreeze", 0, 380 ,180,15,$SS_CENTER)
GUICtrlSetColor(-1,0x00808080)
GUICtrlCreateLabel("INS: Copy hex code to clipboard", 0, 395 ,180,15,$SS_CENTER)
GUICtrlSetColor(-1,0x00808080)


GUISetState()
data()

Func data()

	While 1
		Sleep(50)
		Opt("WinTitleMatchMode",4)
		If (_IsPressed(25) + _IsPressed(26) + _IsPressed(27) + _IsPressed(28)) = 0 Then
        _ResetSpeed()
		EndIf
		$msg=GUIGetMsg()
		Select
			Case $msg=$GUI_EVENT_CLOSE
				Exit
		EndSelect
		
		If GUICtrlRead($KeyBMouse)=$GUI_CHECKED Then
			MouseKeyb()
		Else
			MouseKeybNO()
		EndIf
		
		If GUICtrlRead($Mag)=$GUI_CHECKED Then
			GUICtrlSetState($RB_Window,$GUI_DISABLE)
			GUICtrlSetState($Solid,$GUI_ENABLE)
			GUICtrlSetState($Inver,$GUI_ENABLE)
			GUICtrlSetState($RB_Full,$GUI_CHECKED)
			WinSetState($MyhWnd,"",@SW_SHOW)
			MAG()
			
		Else
			GUICtrlSetState($Solid,$GUI_DISABLE+$GUI_UNCHECKED)
			GUICtrlSetState($Inver,$GUI_DISABLE+$GUI_UNCHECKED)
			GUICtrlSetState($RB_Window,$GUI_ENABLE)
			WinSetState($MyhWnd,"",@SW_HIDE)
		EndIf
		If GUICtrlRead($RB_Full) = $GUI_CHECKED Then
			Opt("MouseCoordMode", 1)
			Opt("PixelCoordMode", 1)
			$pos=MouseGetPos()
			$color=PixelGetColor($pos[0],$pos[1])
			GUICtrlSetData($MousePosX, $pos[0])
			GUICtrlSetData($MousePosY, $pos[1])
			GUICtrlSetData($PixelColor,$color)
			$HEX6=StringRight(Hex($color),6)
			GUICtrlSetData($hexColor,"0x"&$HEX6)
			GUICtrlSetBkColor($MostrarColor,"0x"&Hex($color))
		Else
			Opt("MouseCoordMode", 0)
			Opt("PixelCoordMode", 0)
			Opt("WinTitleMatchMode",1)
			$win = WinGetPos("")
			$pos=MouseGetPos()
			If $pos[0] >= 0 And $pos[0] <= $win[2] and $pos[1] >= 0 And $pos[1] <= $win[3] Then
				$color=PixelGetColor($pos[0],$pos[1])
				GUICtrlSetData($MousePosX, $pos[0])
				GUICtrlSetData($MousePosY, $pos[1])
				GUICtrlSetData($PixelColor,$color)
				$HEX6=StringRight(Hex($color),6)
				GUICtrlSetData($hexColor,"0x"&$HEX6)
				GUICtrlSetBkColor($MostrarColor,"0x"&Hex($color))
			Else
				GUICtrlSetData($MousePosX, "----")
				GUICtrlSetData($MousePosY, "----")
				GUICtrlSetData($PixelColor,"")
				GUICtrlSetData($hexColor,"")
			EndIf
		EndIf
	WEnd
EndFunc

Func TogglePause()
	$Paused = NOT $Paused
	While $Paused
		sleep(10)
		$msg=GUIGetMsg()
		Select
			Case $msg=$GUI_EVENT_CLOSE
				Exit
		EndSelect
	WEnd
EndFunc

Func MAG()
	;Author: Larrydalooza
	WinSetOnTop($MyhWnd,"",1)
  $MyHDC = DLLCall("user32.dll","int","GetDC","hwnd",$MyhWnd)
  If @error Then Return
  $DeskHDC = DLLCall("user32.dll","int","GetDC","hwnd",0)
  If Not @error Then
	 $xy = MouseGetPos()
	 If Not @error Then
		$l = $xy[0]-10
		$t = $xy[1]-10
		DLLCall("gdi32.dll","int","StretchBlt","int",$MyHDC[0],"int",0,"int",0,"int",100,"int",100,"int",$DeskHDC[0],"int",$l,"int",$t,"int",20,"int",20,"long",$SRCCOPY)
		If $xy[0]<(@DesktopWidth-120) then 
			$XArea= $xy[0] + 20
		Else
			$XArea= $xy[0] - 120
		EndIf
		If $xy[1]<(@DesktopHeight-120) then 
			$YArea= $xy[1] + 20
		Else
			$YArea= $xy[1] - 120	
		EndIf
		WinMove($myhwnd, "",$XArea,$YArea , 100, 100)
		If GUICtrlRead($Solid)=$GUI_CHECKED Then
			CrossHairsSOLID($MyHDC[0])
		EndIf
		If  GUICtrlRead($Inver)=$GUI_CHECKED Then
			CrossHairsINV($MyHDC[0])
		EndIf
	 EndIf
	 DLLCall("user32.dll","int","ReleaseDC","int",$DeskHDC[0],"hwnd",0)
  EndIf
  DLLCall("user32.dll","int","ReleaseDC","int",$MyHDC[0],"hwnd",$MyhWnd)
EndFunc

Func Ayuda()
	MsgBox(0,"Help","*Use magnifier for more presicion." & @CRLF & "" & @CRLF & "*Use 'move cursor with keyboard' option for more presicion." & @CRLF & "   -Keeping arrow key pressed increases speed." & @CRLF & "   -Shift+'arrow' moves mouse cursor faster." & @CRLF & "" & @CRLF & "*Use 'Jump to' to move mouse cursor to a specified pixel" & @CRLF & @CR&"*Press PAUSE to freeze and unfreeze." & @CRLF & "" & @CRLF &"*Press INS to copy HEX code to clipboard.")
EndFunc

Func Saltar()
	Do
	$SaltarCord=InputBox("Jump to","Enter pixel coordinates you want to jump to."&@CRLF&"Example: 123,420",MouseGetPos(0)&","&MouseGetPos(1),"",150,150)
	$CoordsM=StringSplit($SaltarCord,",")
	Until @error OR ($CoordsM[1]<=@DesktopWidth AND $CoordsM[2]<=@DesktopHeight)
	if not @error Then
		BlockInput(1)
		MouseMove($CoordsM[1],$CoordsM[2])
		BlockInput(0)
	EndIf	
EndFunc

Func MouseKeyb()

HotKeySet("+{UP}", "_UpArrow")
HotKeySet("{UP}", "_UpArrow")
HotKeySet("+{DOWN}", "_DownArrow")
HotKeySet("{DOWN}", "_DownArrow")
HotKeySet("+{LEFT}", "_LeftArrow")
HotKeySet("{LEFT}", "_LeftArrow")
HotKeySet("+{RIGHT}", "_RightArrow")
HotKeySet("{RIGHT}", "_RightArrow")
EndFunc

Func MouseKeybNO()
HotKeySet("+{UP}")
HotKeySet("{UP}")
HotKeySet("+{DOWN}")
HotKeySet("{DOWN}")
HotKeySet("+{LEFT}")
HotKeySet("+{LEFT}")
HotKeySet("{LEFT}")
HotKeySet("+{RIGHT}")
HotKeySet("{RIGHT}")
EndFunc

Func nada()
EndFunc

Func _copyHEX()
	ClipPut(Guictrlread($hexColor))
EndFunc   ;==>_ShowInfo

Func _UpArrow()
    Local $MousePos = MouseGetPos()
    If _IsPressed(10) Then
        $i = 10
    Else
        $i = 1
    EndIf
    
    If $MousePos[1] > 0 Then
        _BoostMouseSpeed()
        MouseMove($MousePos[0], $MousePos[1] - ($MouseModifier * $i), 1)
    EndIf
EndFunc   ;==>_UpArrow

Func _DownArrow()
    If _IsPressed(10) Then
        $i = 10
    Else
        $i = 1
    EndIf

    Local $MousePos = MouseGetPos()
    If $MousePos[1] < @DesktopHeight Then
        _BoostMouseSpeed()
        MouseMove($MousePos[0], $MousePos[1] + ($MouseModifier * $i),1)
    EndIf
EndFunc   ;==>_DownArrow

Func _LeftArrow()
    If _IsPressed(10) Then
        $i = 10
    Else
        $i = 1
    EndIf

    Local $MousePos = MouseGetPos()
    If $MousePos[0] > 0 Then
        _BoostMouseSpeed()
        MouseMove($MousePos[0] - ($MouseModifier * $i), $MousePos[1],1)
    EndIf
EndFunc   ;==>_LeftArrow

Func _RightArrow()
    If _IsPressed(10) Then
        $i = 10
    Else
        $i = 1
    EndIf

    Local $MousePos = MouseGetPos()
    If $MousePos[0] < @DesktopWidth Then
        _BoostMouseSpeed()
        MouseMove($MousePos[0] + ($MouseModifier * $i), $MousePos[1],1)
    EndIf
EndFunc   ;==>_RightArrow

Func _BoostMouseSpeed()
        If IsInt($PressedTime / 10) Then
            $MouseModifier = $MouseModifier + 1
            $PressedTime = $PressedTime + 1
        Else
            $PressedTime = $PressedTime + 1
        EndIf
EndFunc

Func _ResetSpeed()
    $MouseModifier = 1
    $PressedTime = 1
EndFunc   ;==>_ResetSpeed

Func CrossHairsSOLID(ByRef $hdc)
	;Author: Larrydalooza
    Local $hPen, $hPenOld
    $hPen = DllCall("gdi32.dll","hwnd","CreatePen","int",0,"int",5,"int",0x555555)
    $hPenOld = DllCall("gdi32.dll","hwnd","SelectObject","int",$hdc,"hwnd",$hPen[0])
    DLLCall("gdi32.dll","int","MoveToEx","int",$hdc,"int",52,"int",0,"ptr",0)
    DLLCall("gdi32.dll","int","LineTo","int",$hdc,"int",52,"int",46)
    DLLCall("gdi32.dll","int","MoveToEx","int",$hdc,"int",52,"int",58,"ptr",0)
    DLLCall("gdi32.dll","int","LineTo","int",$hdc,"int",52,"int",100)
    DLLCall("gdi32.dll","int","MoveToEx","int",$hdc,"int",0,"int",52,"ptr",0)
    DLLCall("gdi32.dll","int","LineTo","int",$hdc,"int",46,"int",52)
    DLLCall("gdi32.dll","int","MoveToEx","int",$hdc,"int",58,"int",52,"ptr",0)
    DLLCall("gdi32.dll","int","LineTo","int",$hdc,"int",100,"int",52)
    DllCall("gdi32.dll","hwnd","SelectObject","int",$hdc,"hwnd",$hPenOld[0])
    DllCall("gdi32.dll","int","DeleteObject","hwnd",$hPen[0])
EndFunc

Func CrossHairsINV(ByRef $hdc)
	;Author: Larrydalooza
    Local CONST $NOTSRCCOPY = 0x330008
    DLLCall("gdi32.dll","int","BitBlt","int",$hdc,"int",50,"int",0,"int",5,"int",49,"int",$hdc,"int",50,"int",0,"int",$NOTSRCCOPY)
    DLLCall("gdi32.dll","int","BitBlt","int",$hdc,"int",50,"int",56,"int",5,"int",49,"int",$hdc,"int",50,"int",56,"int",$NOTSRCCOPY)
    DLLCall("gdi32.dll","int","BitBlt","int",$hdc,"int",0,"int",50,"int",49,"int",5,"int",$hdc,"int",0,"int",50,"int",$NOTSRCCOPY)
    DLLCall("gdi32.dll","int","BitBlt","int",$hdc,"int",56,"int",50,"int",44,"int",5,"int",$hdc,"int",56,"int",50,"int",$NOTSRCCOPY)
EndFunc

Func _exit()
	Exit
EndFunc

Re: Macro clicks sobre objeto de color

Publicado: 01 Feb 2009, 22:48
por Chefito
Muy buen programa Nahuel!!! :smt023 . Y muy buenas funciones las de Larrydalooza.
Te animo a que pongas este programa en el subforo de esScripts :smt004 , porque merece estar allí :smt002 .

Yo ya había imaginado de como hacerlo. Pero lo que no se me ocurrió fue mostrar la lupa en el tooltips_class32. Eso ha sido muy bueno :smt023 . Muy buena idea.

A mi se me ocurrió utilizar las funciones Udf de GDI+ para hacer esto. Y pensé que habías utilizado una ventana transparente con un control pic al lado del cursor para mostrar la lupa. Pero lo del tooltip es buenísimo y mucho mejor.

Si tengo ganas lo intento hacer como he dicho a ver si es posible.......ya sabes que me gusta dar otras opciones :smt005 , aunque el tuyo va de película :smt023 .

Saludos.

Re: Macro clicks sobre objeto de color

Publicado: 02 Feb 2009, 00:57
por Nahuel
Muchas gracias :) Ahora mismo lo pongo.