asignar un área a PixelSearch ¿? Topic is solved

Esta sección es para preguntas sobre programación/scripting usando AutoHotkey.

Moderator: Flipeador

Endless325

asignar un área a PixelSearch ¿?  Topic is solved

08 Jul 2017, 10:05

Hola buenas tardes, estoy iniciándome un poco en todo esto del auto hotckey y bueno con ayuda de la comunidad he armado un pequeño script que me funciona casi excelente, su función es dar clic a un color de pixel que le asigno con ayuda del Pixel storer, y luego dar nuevamente clic a una coordenada especifica que ya le tengo asignada.

El problema (y no se si esto tenga solución) es que el color al que me interesa darle clic a veces se repite dentro de la pantalla y es allí cuando la función de PixelSearch empieza a tirarme clics en donde no quisiera, entonces no se existe la posibilidad de yo asignarle un área dentro de todo el marco de mi pantalla de monitor a esta excelente función :(

Esto es mas o menos lo que busco hacer en la pantalla: https://ibb.co/m8cD2v

Code: Select all

F1:: ;ALT+F1 para iniciar un loop

	Loop {
	
	SetMouseDelay, 7
	
	Color := 0x172240 ; Buscar el pixel en la pantalla y da clic
	
	PixelSearch, X, Y, 0, 0, % A_ScreenWidth, % A_ScreenHeight, % Color,, Fast
	if (ErrorLevel) {
	;MsgBox ERROR!
	PixelSearch, X, Y, 0, 0, % A_ScreenWidth, % A_ScreenHeight, % Color,, Fast
	}
	else
	Click %X%, %Y%
	

	MouseClick, Left, 765, 394 ; hace clic en cordenada fija
	
	} ;Termina Loop
return


F2::Pause ; ALT+P para pausar/reanudar el script
F3::ExitApp ; ALT+F3 para salir del script
A_AhkUser
Posts: 1147
Joined: 06 Mar 2017, 16:18
Location: France
Contact:

Re: asignar un área a PixelSearch ¿?

08 Jul 2017, 12:09

entonces no se existe la posibilidad de yo asignarle un área dentro de todo el marco de mi pantalla de monitor a esta excelente función

Para explicitar tu codigo:

Code: Select all

0, 0, % A_ScreenWidth, % A_ScreenHeight
son las coordenadas de la esquina superior izquierda (0, 0) y de la esquina inferior derechar (1360, 768), respectivamente - es decir tu pantalla entera: la busqueda concerne toda tu pantalla.
En vez de utilizar esos valores utiliza variables que corresponden con las del area en la que quieres llevar la busqueda.

Con codigo mas abajo, al presionar F4, podras visualemente colocar y delimitar el area (las coordenadas son automaticamente copiadas al portepapeles):

Code: Select all

#NoEnv
#Warn
#SingleInstance force
CoordMode, Window, Screen

PSX1 := 0, PSY1 := 0, PSX2 := A_ScreenWidth, PSY2 := A_ScreenHeight ; coordenadas por defecto del pixelsearch
Color :="0x172240" ; coloca esta asignación fuera del loop de otra manera va a ser ejecutada inútilmente a cada iteración del loop.
 
; GUI para rescatar y asignar nuevas coordenadas:
Gui, 1:+hwndID +AlwaysOnTop -Caption +Resize
Gui, 1:Add, Text, vtextControl x0 y0 w202 h15 gGUIsubrutina1,
Gui, 1:Add, Button, vbuttonControl x1 y16 w200 h30,
Hotkey, IfWinActive, ahk_id %ID%
Hotkey, ~LButton Up, GUIsubrutina2, on
return ; fin de la parte auto-ejecutada del script


F4:: ; para mostrar el GUI y modificar visualmente las coordenadas por defecto
Gui, 1:Show, w202 h47,
WinSet, Transparent, 140, ahk_id %ID% ; hace que la GUI sea un poco transparente
GUIsubrutina2: ; subrutina ejecutada al desapretar el LButton sobre la GUI
WinGetPos, X1, Y1, W, H, ahk_id %ID%
clipboard := "[X: " . X1 . ", Y: " . Y1 . ", W: " . (X2:=X1+W) . ", H: " . (Y2:=Y1+H) . "]" ; copia las coordenadas al portapapeles
GuiControl, 1:, buttonControl, % clipboard
return

; ============ subrutinas de la GUI ============

GUIsubrutina1:
PostMessage, 0x00A1, 2,,, A ; https://autohotkey.com/board/topic/80594-how-to-enable-drag-for-a-gui-without-a-titlebar/
return

GuiSize: ; subrutina arrancada cada vez que la ventana mueve
GuiControl, 1:Move, textControl, W%A_GuiWidth% H%A_GuiHeight%
GuiControl, 1:Move, buttonControl, % "X" . A_GuiWidth/2 - 100 . " Y" . A_GuiHeight/2 - 15 ; centra el boton
return

GUIEscape: ; subrutina arrancada al presionar escape
Gui, 1:Hide
return

; ====================================

F1::
SetMouseDelay, 7 ; fuera del loop
Loop {

	Loop, 2
	{
	PixelSearch, X, Y, % PSX1, % PSY1, % PSX2, % PSY2, % Color,, Fast ; utiliza las variables resctada utilzando el GUI o las por defecto
	if not (ErrorLevel)
		break ; detiene el loop
	}
	Click %X%, %Y% ; hace click a las coordenadas X, Y (eventualmente actualizadas, o por la primera, o por la segunda ejecuccion de PixelSearch).
	MouseClick, Left, 765, 394 ; hace clic en cordenada fija
	
sleep, 400 ; te aconsejo  colocar un sleep aqui: eso permite ahorrar tu CPU
}
return


F2::Pause
F3::ExitApp
my scripts

Return to “Pedir Ayuda”

Who is online

Users browsing this forum: No registered users and 10 guests