2011-04-21 5 views
5

Estoy tratando de descubrir el código ObjC necesario para detectar si un usuario en OSX está ingresando texto en un campo/área de texto o no. Me gustaría proporcionar combinaciones de teclas especiales y expansión de texto si lo son. No estoy escribiendo un sniffer clave.Cómo filtrar y anular el ingreso de texto en Mac OS X

He intentado hacer esto detectando si el cursor está oculto O el modo del cursor es el Amperio pero esto no funciona. Por ejemplo, un caso de falso positivo es cuando Chrome oculta el cursor al cambiar de pestaña, por lo tanto, el usuario no está en el modo de entrada de texto, pero el cursor se ha ocultado.

Cualquier ayuda sería muy apreciada.

Gracias.

+0

¿Qué tipo de combinaciones de teclas y autocompletado quieres agregar? El sistema de texto de OS X ya es bastante poderoso, por lo que si no hace lo que necesita, deberá tener cuidado de no hacer nada que entre en conflicto con el sistema de combinación de teclas y de finalización existente. Además, tus etiquetas son redundantes y conflictivas. ¿Desea una solución de cacao, una solución de carbono o ambas cosas? Y la etiqueta del appkit es innecesaria. – user57368

+1

@Josh Caswell - Corregido ahora. Lo siento, no he estado aquí desde hace tiempo :) –

+0

@ user57368 - Tomaré cualquier solución. Pensé que las diferentes etiquetas podrían atraer a personas con diferente experiencia. –

Respuesta

3

Pude encontrar el elemento UI actual con foco usando Accessibility API y luego ver su descripción de la función para determinar si era una entrada de texto.

+0

Este enlace ahora está muerto, por lo que es útil agregar código a su respuesta. –

0

Puede interceptar y anular toda la entrada de texto creando su propio método de entrada. Puede hacerlo mediante programación (collection of 5 code samples) o con text-based rule file (opción menos potente).

+0

Eso es una idea ... sin embargo, me gustaría detectar cuando los usuarios ingresan inicialmente un estado de entrada de texto. Creo que este método solo detectará una vez que se haya ingresado el texto. –

0

Puede que ni siquiera necesite escribir una aplicación, si lo que desea es posible con the Default Key Bindings dictionary o la función de sustitución de texto incorporada de Snow Leopard; para este último, consulte la pestaña Texto en el panel Idioma y texto en Preferencias del sistema.

No hay manera de detectar cuando el usuario ingresa al modo de "entrada de texto" globalmente, ya que está definido en el nivel de la aplicación. Puede hacer ciertas cosas (como arriba) dentro del sistema de texto proporcionado por el marco de trabajo de AppKit, pero no podrá afectar las aplicaciones que no lo usan, como las aplicaciones de Adobe y cualquier campo de entrada de texto en una película Flash (por ejemplo, "Ingrese su nombre para el tablero de puntaje alto:"). Las únicas cosas que existen en todo el sistema son los eventos clave, que son mucho más bajos que el concepto de entrada de texto, y el modo de texto seguro [1], que es solo para cosas como campos de contraseña.

[1]: TN2150 describe cómo funciona el modo "entrada de evento seguro" y la interfaz manual para él. La mayoría de las aplicaciones (Cocoa) solo usan NSSecureTextField, que hace el trabajo duro por ti.