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

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: 1146
Joined: 15 Nov 2014, 21:31
GitHub: Flipeador
Location: Argentina
Contact:

Re: Buscar Imagen, Confusion - Ayuda

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"...

Return to “Pedir Ayuda”

Who is online

Users browsing this forum: No registered users and 2 guests