obtener el foco donde está situado el cursor

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
taoru
Hacker del Foro
Mensajes: 72
Registrado: 31 Mar 2010, 07:53
Ubicación: buenos aires
Contactar:

obtener el foco donde está situado el cursor

Mensaje por taoru »

Buenas!, hace rato que no pasaba por aquí, espero que todos anden bien.
mi consulta parte de lo siguiente, estoy agregando accesskey a un formulario.
que es una especie de chat, donde tiene el input para escribir, y el cuadro donde muestra el texto, y 2 botones, enviar y opciones.

quería agregar el accesskey si pulsa enter en el input del texto que se pulse automáticamente el botón enviar. el drama que si lo predefino que el enter es el botón enviar, cuando pulse enter en el botón opciones se pulsará enviar también y no opciones.
así que no debería capturar el enter a secas.

para solucionar este tema se me ocurrió que autoit pueda decirme en que cuadro esté situado el cursor.

si pulsa enter en:
* en el input, active el botón enviar
* si está en el botón enviar, que lo active
* encambio si está situado en el botón opciones, que lo active al opciones.

estube buscando una función de autoit que me diga donde está situado el cursor, pero la verdad no lo encontré. solo encontré la función que me dice donde está situado el cursor del mouse, en que cordenada.
pero no una función que diga si está situado en x control del formulario el cursor de escritura.
¿existe esa función?, saben cual es?

pd.: se que el GUICtrlSetState($control, $GUI_FOCUS), te lleva a un control y sitúa el foco ahí, yo necesito una función que haga la inversa. que me diga donde está el foco situado, en que control.

gracias por la ayuda.
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: obtener el foco donde está situado el cursor

Mensaje por Ximorro »

Pueeeees si estamos hablando de un GUI Windows sí es posible, si es un chat en una página web o hecho con Java pues no.

Con la API de Windows se puede hacer con la función _WinAPI_WindowFromPoint($posicion), siendo $posicion una estructura de la API que contiene la posición del cursor, que puedes obtener con _WinAPI_GetMousePos().

_WinAPI_WindowFromPoint te dará el handle del control bajo el cursor, lógicamente tienes que tener los controles previamente identificados. Tendrás que capturar el ENTER como hotkey pues lo quieres capturar para otro programa y según el handle de control que tengas en ese momento actuar en consecuencia.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: obtener el foco donde está situado el cursor

Mensaje por Chefito »

Si es para otra ventana distinta a la de tu script:

Otra idea que ya fue muy comentada en este foro hace mucho mucho tiempo es utilizar hook para enganchar y poder tratar las pulsaciones. Lástima que se perdiesen esos posts por culpa del daño que hubo en la base de datos del foro. Habían muchos posts míos donde hablaba bastante a fondo del tema.
Pero por fortuna, autoit avanza y añadiron las apis que se necesitaban para realizar el código más facilmente. No solo eso, sino que tenemos un ejemplo de captura de teclas a nuestra disposición en la ayuda. Mira la función _WinAPI_SetWindowsHookEx y sobre todo su ejemplo.

Variando un poco el ejemplo, quitando todo lo que no necesitas y, por ejemplo, condicionando que solamente enguanche las pulsaciones cuando el foco esté en el edit que dices, ya tienes casi el código completo. También lo condicionas para que cuando detecte el return pulse el botón y listo. Fácil :smt003 .

También puedes enganchar los eventos de un objeto, pero eso se hace de otro modo. Seguramente si buscar en el foro ingles encontrarás códigos que te digan como se hace.

Lo anterior es para una ventana distinta (o también propia), pero si es para un edit tu ventana (tu script), esto se puede hacer de una forma más facil.

Si tienes alguna duda pregunta :smt002 .

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
taoru
Hacker del Foro
Mensajes: 72
Registrado: 31 Mar 2010, 07:53
Ubicación: buenos aires
Contactar:

Re: obtener el foco donde está situado el cursor

Mensaje por taoru »

como siempre, la respuesta para todas las dudas, gracias gracias!.
es para un gui propio, que creo en el script mio, así que no ahi problema de identificación, calculo que con el primer método que me diste podré.

me pondré a hacer las pruebas, si surgen dudas vuelvo a preguntar, y si no, copiaré un ejemplo por aquí.
gracias!.
Responder