Buscar Imagen, Confusion - Ayuda

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

Moderator: Flipeador

boch4maN
Posts: 6
Joined: 07 Jan 2016, 01:01

Buscar Imagen, Confusion - Ayuda

Post by boch4maN » 07 Jan 2016, 02:04

Hola!

Despues de años usando Macros, pido ayuda!

Image

Tengo 4 numeros al azar
ejemplo: 1,2,3 ( 0000, 9999, 0172, 5428, 9195, etc )

Y tengo un Numpad con 9 Numeros pero Desordenados!
ejemplo: 1 y 2

Y Tenemos el boton "OK"

Necesito que el Macro LEA los 4 Numeros, y clickee en esos 4 mismo numeros en la NUMPAD, y despues apretar OK.

Ayudita? :3

----
Como pienso que deberia ser?

Si la ventana aparece, Imagen detectada, Continuar
Busco la Imagen del primer de los 4 digitos, el numero (0,1,2,3,4,5,6,7,8,9),
If 1 not found, continue
If 2 not found, continue
If 3 found, SearchImg en el Numpad por el mismo numero "3", Click
Sigo con el proximo Digito
Busco la Imagen del segundo de los 4 digitos, el numero (0,1,2,3,4,5,6,7,8,9),
If 1 not found, continue
If 2 not found, continue
If 3 found, SearchImg en el Numpad por el mismo numero "3", Click
Sigo con el proximo Digito
Busco la Imagen del tercer de los 4 digitos, el numero (0,1,2,3,4,5,6,7,8,9),
If 1 not found, continue
If 2 not found, continue
If 3 found, SearchImg en el Numpad por el mismo numero "3", Click
Sigo con el proximo Digito
Busco la Imagen del cuarto de los 4 digitos, el numero (0,1,2,3,4,5,6,7,8,9),
If 1 not found, continue
If 2 not found, continue
If 3 found, SearchImg en el Numpad por el mismo numero "3", Click
Click OK
La ventana desaparece

Y espero a que la ventana aparezca de nuevo para empezar a buscar los 4 digitos de nuevo
--------

Me perdi en la parte de "if ImageFound, Buscar Imagen en el Numpad"

Muchas gracias, llevo luchando horas!

User avatar
Flipeador
Posts: 1204
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Buscar Imagen, Confusion - Ayuda

Post by Flipeador » 12 Jan 2016, 16:40

Hola,
Lo único que se me ocurre es que tal vez puedas obtener el nombre del número o algo que permita identificarlo con esta función:
(reemplaza 978 y 592 por las coordenadas xy de, por ejemplo, el boton 5 del númpad y fijate que te devuelve)

Code: Select all

for k, v in MouseGetText(978, 592)
	MsgBox % v
MouseGetText(x := "", y := "", Encoding := "UTF-16") {
	static uia
	if !(uia) ;https://msdn.microsoft.com/en-us/library/windows/desktop/ff384838%28v=vs.85%29.aspx
		uia := ComObjCreate("{ff48dba4-60ef-4201-aa87-54103eef594e}", "{30cbe57d-d9d0-452a-ab13-7ac5ac4825ee}")
	Item := {}, DllCall(_vt(uia,7),"Ptr",uia,"int64",x|y<<32,"Ptr*",element)
	if !(element)
		return "", ErrorLevel := true
	DllCall(_vt(element,23),"Ptr",element,"Ptr*",name),DllCall(_vt(element,10),"Ptr",element,"UInt",30045,"Ptr",_variant(var))
	,DllCall(_vt(element,10),"Ptr",element,"uint",30092,"Ptr",_variant(lname)), DllCall(_vt(element,10),"Ptr",element,"uint",30093,"Ptr",_variant(lval))
	,a:=StrGet(name,"utf-16"),b:=StrGet(NumGet(val,8,"Ptr"),Encoding),c:=StrGet(NumGet(lname,8,"Ptr"),Encoding)
	,d:=StrGet(NumGet(lval,8,"Ptr"),Encoding),a?Item.Push(a):0,b&&_vas(Item,b)?Item.Push(b):0,c&&_vas(Item,c)?Item.Push(c):0
	,d&&_vas(Item,d)?Item.Push(d):0,DllCall(_vt(element,21),"Ptr",element,"Uint*",type)
	if (type=50004)
		e:=MouseGetText_ElementWhole(uia,element),e&&_vas(item,e)?item.Push(e):false
	return Item, ObjRelease(element), ErrorLevel := false
} MouseGetText_ElementWhole(uia, element) {
	static init := 1, trueCondition, walker
	if (init)
		init:=DllCall(_vt(uia,21),"ptr",uia,"ptr*",trueCondition),init+=DllCall(_vt(uia,14),"ptr",uia,"ptr*",walker)
	DllCall(_vt(uia,5),"ptr",uia,"ptr*",root), DllCall(_vt(uia,3),"ptr",uia,"ptr",element,"ptr",root,"int*",same), ObjRelease(root)
	if (same)
		return
	hr:=DllCall(_vt(walker,3),"ptr",walker,"ptr",element,"ptr*",parent)
	if !(e:="") && !(parent)
		return
	DllCall(_vt(parent,6),"ptr",parent,"uint",2,"ptr",trueCondition,"ptr*",array), DllCall(_vt(array,3),"ptr",array,"int*",length)
	Loop % (length)
		DllCall(_vt(array,4),"ptr",array,"int",A_Index-1,"ptr*",newElement), DllCall(_vt(newElement,23),"ptr",newElement,"ptr*",name)
		, e.=StrGet(name,"utf-16"), ObjRelease(newElement)
	return e, ObjRelease(array), ObjRelease(parent)
} _vas(obj,ByRef txt) {
	for k,v in obj
		if (v=txt)
			return false
	return true
}_variant(ByRef var,type:=0,val:=0) {
	return (VarSetCapacity(var,8+2*A_PtrSize)+NumPut(type,var,0,"short")+NumPut(val,var,8,"ptr"))*0+&var
}_vt(p,n) {
	return NumGet(NumGet(p+0,"ptr")+n*A_PtrSize,"ptr")
}
Para obtener las coordenadas, puedes usar este script, mantén precionado F1 para ver las coordenadas xy actuales:

Code: Select all

F1::
while GetKeyState(A_ThisHotkey, "P") {
	MouseGetPos, x, y
	ToolTip % x "," y
	Sleep, 100
} ToolTip
return

Si no te devuelve nada que permita identificarlo, no tengo idea de que otra forma podrías leer "los números de la imagen"...

Post Reply

Return to “Pedir Ayuda”