UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA ESCUELAS DE INGENIERÍA EN COMPUTACIÓN Y ELECTRÓNICA ““““““““DDDDDDDDEEEEEEEESSSSSSSSAAAAAAAARRRRRRRRRRRRRRRROOOOOOOOLLLLLLLLLLLLLLLLOOOOOOOO DDDDDDDDEEEEEEEE UUUUUUUUNNNNNNNNAAAAAAAA HHHHHHHHEEEEEEEERRRRRRRRRRRRRRRRAAAAAAAAMMMMMMMMIIIIIIIIEEEEEEEENNNNNNNNTTTTTTTTAAAAAAAA DDDDDDDDEEEEEEEE AAAAAAAACCCCCCCCCCCCCCCCEEEEEEEESSSSSSSSIIIIIIIIBBBBBBBBIIIIIIIILLLLLLLLIIIIIIIIDDDDDDDDAAAAAAAADDDDDDDD DDDDDDDDEEEEEEEELLLLLLLL TTTTTTTTIIIIIIIIPPPPPPPPOOOOOOOO LLLLLLLLEEEEEEEECCCCCCCCTTTTTTTTOOOOOOOORRRRRRRR DDDDDDDDEEEEEEEE PPPPPPPPAAAAAAAANNNNNNNNTTTTTTTTAAAAAAAALLLLLLLLLLLLLLLLAAAAAAAA”””””””” PROYECTO DE GRADUACIÓN PARA OPTAR AL GRADO DE INGENIERO EN COMPUTACIÓN / ELECTRÓNICA PRESENTADO POR: ALVIN MIGUEL FLORES BRAN ALICIA IVETTE SALINAS BENÍTEZ LAURA YANIRA SALAZAR CALDERÓN CIUDADELA DON BOSCO SEPTIEMBRE 2002 i ÍNDICEÍNDICEÍNDICEÍNDICE INTRODUCCIÓN ................................................................................................... 1 II. OBJETIVOS....................................................................................................... 4 2.1 Objetivo General ...................................................................................... 4 2.2 Objetivos Específicos............................................................................... 4 III. ALCANCES Y LIMITACIONES ........................................................................ 6 3.1 Alcances .................................................................................................. 6 3.2 Limitaciones ............................................................................................. 9 IV. MARCO TEÓRICO ....................................................................................... 11 4.1 Lector de pantalla................................................................................... 11 4.2 Programación Basada en Windows (win32) .......................................... 23 4.3 Introducción a la API de Windows.......................................................... 35 4.4 Objetos Específicos ............................................................................... 38 V. DISEÑO DEL PROTOTIPO........................................................................... 52 5.1 Lector de Pantalla a Desarrollar............................................................. 52 5.2 Árbol de Opciones.................................................................................. 66 5.3 Diseño de la Interfaz de la Aplicaión...................................................... 70 VI. DESARROLLO DEL PROTOTIPO............................................................... 74 6.1 Inicialización del formulario de la Aplicación .......................................... 74 6.2 Desarrollo de las opciones del Menú de la Aplicación ........................... 75 6.3 Desarrollo de Detección de Ventana Activa........................................... 91 6.4 Desarrollo de Detección de Objetos Estándares ................................... 98 6.5 Desarrollo de Detección de Teclas ...................................................... 111 6.6 Desarrollo de las Funciones de Captura de Mensajes......................... 112 6.7 Desarrollo de Detección de objetos específicos .................................. 116 IX. CONCLUSIONES ....................................................................................... 120 X. RECOMENDACIONES................................................................................ 123 ii XI. FUENTES DE INFORMACIÓN................................................................... 125 XII. GLOSARIO................................................................................................. 126 iii LISTA DE TABLASLISTA DE TABLASLISTA DE TABLASLISTA DE TABLAS Tabla 4.1: Lista de Programas Lectores de Pantalla....................................................12 Tabla 4.2; Clases del Sistema......................................................................................29 Tabla 4.3; Propiedades, Métodos, y Eventos para Objetos de Microsoft Word...........48 Tabla 4.4: Propiedades, Métodos, y Eventos para Objetos de Microsoft Excel...........48 Tabla 4.5: Propiedades para Objetos de Microsoft Office............................................49 iv LISTA DE FIGURASLISTA DE FIGURASLISTA DE FIGURASLISTA DE FIGURAS Figura 4.1: Matriz Braile.................................................................................................13 Figura 4.2: Estructura Básica de un Lector de Pantalla................................................14 Figura 4.3: Ejemplo de Barra de Menús Estándar.........................................................16 Figura 4.4: Arquitectura de un Motor TTS.....................................................................20 Figura 4.5: Cuadro de Diálogo "Ejecutar"......................................................................24 Figura 4.6: Cuadro de Mensaje "Confirmar Eliminación"...............................................24 Figura 4.7: Botón de Comando......................................................................................25 Figura 4.8: Botón de Chequeo.......................................................................................25 Figura 4.9: Botón de Opción..........................................................................................26 Figura 4.10: Cuadro de Combos.....................................................................................26 Figura 4.11: Cuadro de Edición.......................................................................................26 Figura 4.12: Barra de Menús...........................................................................................27 Figura 4.13: Cuadro de Lista...........................................................................................27 Figura 4.14: Vista de Lista...............................................................................................28 Figura 4.15: Barra de Herramientas................................................................................28 v Figura 4.16: Vista de Árbol..............................................................................................28 Figura 4.17: Fichero.........................................................................................................29 Figura 4.18: Aplicación Microsoft Excel 2000..................................................................41 Figura 4.19: Modelo de objeto de Microsoft Excel...........................................................42 Figura 4.20: Modelo de objeto de Microsoft Word...........................................................43 Figura 4.21: Aplicación Microsoft Word 2000..................................................................44 Figura 4.22: Objetos de las Barras de Comando............................................................45 Figura 5.1: Estructura del Lector de Pantalla................................................................52 Figura 5.2: Funciones que realizará el Lector de Pantalla............................................60 Figura 5.3: Árbol de Opciones del Lector de Pantalla...................................................66 Figura 5.4: Ventana de la Aplicación Lector de Pantalla...............................................72 Figura 5.5: Ventana Información del Lector de Pantalla................................................73 Figura 6.1: Flujograma Inicialización.............................................................................74 Figura 6.2: Flujograma Ocultar Ventana........................................................................75 Figura 6.3: Flujograma Deshabilitar...............................................................................76 Figura 6.4: Flujograma Cerrar.......................................................................................77 Figura 6.5: Flujograma Descargar Formulario...............................................................77 vi Figura 6.6: Flujograma Velocidad Lenta........................................................................78 Figura 6.7: Flujograma Velocidad Normal.....................................................................80 Figura 6.8: Flujograma Velocidad Rápida.....................................................................82 Figura 6.9: Flujograma Velocidad Personalizada..........................................................84 Figura 6.10: Flujograma Género Femenino.....................................................................86 Figura 6.11: Flujograma Género Masculino....................................................................87 Figura 6.12: Flujograma Detección de Teclado y Submenús..................................,,......88 Figura 6.13: Flujograma Deshabilitar...............................................................................90 Figura 6.14: Flujograma De Inicialización........................................................................91 Figura 6.15: . Flujograma Ventana Activa y Objetos con Enfoque....................................93 Figura 6.16: Flujograma Tipo de Controles Elección de Controles.................................95 Figura 6.17: Flujograma Asignación Objeto con Enfoque...............................................96 Figura 6.18: Flujograma Finalización y Vocalización de Ventana Activa y Controles con Enfoque.......................................................................................................97 Figura 6.19: Flujograma Combo Box...............................................................................98 Figura 6.20: Flujograma Cuadro de Edición (A)..............................................................99 Figura 6.21: Flujograma Cuadro de Edición (B)............................................................100 vii Figura 6.22: Flujograma Vista de Lista..........................................................................102 Figura 6.23: Flujograma Vista de Árbol.........................................................................104 Figura 6.24: Flujograma Fichero....................................................................................105 Figura 6.25: Flujograma Barra de Herramientas...........................................................106 Figura 6.26: Flujograma Cuadro de Lista......................................................................107 Figura 6.27: Flujograma de Barra de Menú Estándar...................................................109 Figura 6.28: Flujograma Detección de Teclas...............................................................111 Figura 6.29: Flujograma Función CWPFunction............................................................114 Figura 6.30: Flujograma Función MSGFunction............................................................115 INTRODUCCIÓNINTRODUCCIÓNINTRODUCCIÓNINTRODUCCIÓN Desde hace algunos años la tecnología informática comenzó a estar disponible para la comunidad no vidente gracias al desarrollo de programas de computadora especializados, que tienen la capacidad de capturar la información que se presenta en la pantalla, y posteriormente transmitirla al usuario de forma verbal, o a través de periféricos especializados que simulan el alfabeto braile. Los programas que incorporan estas funciones son conocidos con el nombre de lectores de pantalla. Hoy en día, constituyen la principal herramienta de accesibilidad en el mundo informático para las personas con discapacidades visuales, dado que sin estos programas las computadoras serían prácticamente imposibles de utilizar. La disponibilidad de estas herramientas se ha incrementado debido tanto al avance de la tecnología, como a la necesidad de los discapacitados visuales de no permanecer marginados del mundo de la informática. De esta forma, es posible encontrar desde versiones gratuitas de lectores de pantalla, hasta versiones comerciales básicas y profesionales, cuyos precios oscilan entre $75 y $2100. Entre la gran variedad de lectores de pantalla que existen, algunos comparten características similares y otros presentan mayor funcionalidad que el resto. También ocurre que a pesar de contar con muchas características, algunas veces carecen de detalles presentes en programas más sencillos, existiendo la posibilidad de ofrecer herramientas más completas que atiendan con mayor eficacia las necesidades de accesibilidad asociadas a las personas no videntes. Relacionando directamente funcionalidad y precio, aquellos lectores de pantalla que ofrecen mayores facilidades al usuario no vidente para el uso de una computadora, son al mismo tiempo los de mayor costo en el mercado, 2 convirtiéndose en herramientas de lujo y de acceso limitado para la mayoría de la población no vidente en El Salvador, tomando en cuenta el estado de marginación, abandono y pobreza en que muchas de estas personas viven. Junto al alto costo de los lectores de pantalla y a la inexistencia de estos productos en el mercado local, se encuentra la falta de apoyo económico y legislativo por parte del estado, lo que limita aún más las posibles oportunidades y beneficios que el uso de estas tecnologías de accesibilidad proporcionaría a la población no vidente. Ante situaciones como ésta, el aporte que pueden brindar otros sectores, como la comunidad educativa, e instituciones no gubernamentales, adquiere gran importancia. Es así como a pesar de que la población de discapacitados no videntes de nuestro país ha sido marginada de la sociedad y del mundo laboral a través de los años, existen en la actualidad instituciones que impulsan y promueven programas para el desarrollo e inserción de estas personas, dentro de la sociedad activa y productiva del país. Sin embargo, el alcance de tales programas de desarrollo y capacitación, se ve limitado por el poco apoyo que reciben dichas instituciones, y por el escaso número de éstas en el país, siendo así mínima la población no vidente beneficiada por estos programas. Para la comunidad educativa, el área de investigación constituye una de las principales alternativas para contribuir con el desarrollo de distintos sectores de la población, y junto al hecho de que actualmente no existen en nuestro país estudios previos acerca del desarrollo de herramientas como los lectores de pantalla, constituyen una de las principales motivaciones para la realización de este proyecto, cuyo fin social consiste en establecer un antecedente en la elaboración de herramientas de accesibilidad para discapacitados, enfatizando la importancia de tomar en cuenta a este sector de la población en futuras investigaciones que faciliten y agilicen su inserción dentro de la sociedad activa de El Salvador. 3 Si bien los resultados del mismo no están orientados a resolver el problema de la falta de apoyo legislativo o económico, para la adquisición de herramientas especiales como los lectores de pantalla, se espera que a través de la documentación de los fundamentos teóricos utilizados y del código a emplear para el diseño y desarrollo de un lector de pantalla básico, se establezca un antecedente de utilidad para el estudio y desarrollo de herramientas de accesibilidad de este tipo, y para otros proyectos que beneficien el desarrollo de la comunidad de discapacitados en general. El programa a desarrollar no pretende entrar en ningún tipo de competencia con programas existentes en el mercado actualmente, en primer lugar, porque no será un producto destinado al mercado, sino un prototipo de investigación; y en segundo lugar, porque será desarrollado a un nivel básico, es decir, que cumplirá algunas de las funciones que son básicas para todo lector de pantalla, como la detección de la ventana en la que el usuario se encuentra trabajando, y la interacción con otros objetos presentes en la pantalla. 4 II. OBJETIVOSII. OBJETIVOSII. OBJETIVOSII. OBJETIVOS 2.1 OBJETIVO GENERAL • Desarrollar una aplicación que permita y facilite a las personas con discapacidad visual, la utilización de elementos básicos del sistema operativo Windows y de aplicaciones basadas en el mismo, a través de la lectura del contenido de la pantalla. 2.2 OBJETIVOS ESPECÍFICOS • Investigar y estudiar elementos de programación que puedan ser empleados para la detección de los objetos que componen una aplicación, así como el texto que se presenta en la pantalla de la computadora como consecuencia de las acciones ejecutadas por el usuario, por la aplicación en curso, y por el sistema operativo. • Implementar los resultados de la investigación en el desarrollo de una aplicación del tipo lector de pantalla que proporcione al usuario no vidente un nivel de accesibilidad básico al entorno del sistema operativo y sus aplicaciones. • Incorporar a la aplicación un sintetizador de voz en español, que haciendo uso de la tarjeta de sonido incluida en la computadora, transmita oralmente al usuario la información detectada en la pantalla. • Facilitar la interacción del usuario con las aplicaciones, transmitiéndole oralmente información adicional, tal como el tipo y estado de los elementos contenidos en las mismas. 5 • Establecer un precedente, en el estudio e investigación de elementos y herramientas de accesibilidad, para futuras investigaciones que pretendan desarrollar un lector de pantalla de mayor complejidad que el programa básico que se desarrollará en este proyecto. 6 III. ALCANCES Y LIMITACIONESIII. ALCANCES Y LIMITACIONESIII. ALCANCES Y LIMITACIONESIII. ALCANCES Y LIMITACIONES 3.1 ALCANCES • Como programa lector de pantalla, la aplicación a desarrollar proporcionará a los usuarios las siguientes características: - Detección de la ventana activa. La ventana activa es aquella que tiene la capacidad de recibir simultáneamente las acciones ejecutadas por el usuario a través del teclado y el ratón. Su detección consiste en la lectura del título de la ventana, el cual puede ser o no visible. - Lectura de las teclas presionadas. - Reconocimiento de objetos estándares presentes en las aplicaciones, tales como: ! Botones de comando (Command Button) ! Botones de opción (Radio Button) ! Cuadros de chequeo (Check Box) ! Cuadros de texto (Text Box) ! Cuadro de combos (Combo Box) ! Control estático (Static Control) ! Vista de lista (List View) ! Vista de árbol (Tree View) ! Barra de herramientas (Tool Bar) ! Ficheros (Tab Control) ! Menús no flotantes (Menu) 7 Mediante el reconocimiento de estos objetos, será posible interactuar con las aplicaciones que los contengan. Se indicará el tipo de objeto y el texto contenido en el mismo. - Lectura de la información presente en cuadros de mensaje. - Lectura del texto contenido en archivos “.txt” (archivos de Notepad) existentes, y del texto digitado por el usuario. - Lectura del texto contenido en archivos “.doc” (documentos de Word 97 ó 2000) existentes, y del texto digitado por el usuario. - Lectura del contenido de las celdas en archivos “.xls” (hojas de cálculo de Excel 97 ó 2000) existente, y del texto digitado por el usuario. • El sintetizador de voz que será utilizado para la lectura de la información detectada tendrá la ventaja de poderla vocalizar en español, facilitando de este modo su comprensión por parte del usuario. • La aplicación incorporará scripts, con los cuales puede lograrse o mejorarse el acceso a las aplicaciones que utilizan elementos que no forman parte de la colección de objetos estándar de Windows. Los scripts consistirán en archivos de texto “.txt” en los que se almacenará información sobre las posibles combinaciones de teclas que permiten utilizar la aplicación. • La aplicación incorporará un sistema de ayuda, adicional a la brindada por otros programas lectores de pantalla, que permitirá al usuario tener información complementaria de los objetos y aplicaciones propios del sistema operativo. 8 • A través de la investigación se resalta la importancia de la incorporación de opciones de accesibilidad para discapacitados al desarrollar proyectos y sistemas orientados al área de informática, así como la creación de herramientas que permitan accederlos. • El proyecto establecerá un precedente para la implementación de aplicaciones e investigaciones futuras que beneficien a la comunidad con discapacidades visuales. • Los principios y elementos básicos utilizados para el desarrollo del sistema son aplicables a futuros proyectos que se desarrollen en plataformas posteriores a Microsoft Windows 95/98. • La estructura del programa será por módulos, así cada modulo trabajara sobre una aplicación o parte del sistema operativo, esto otorgará facilidades a futuros desarrolladores que pretendan hacer cambios o mejoras al mismo. • La forma de acceder a la información de algunos elementos del sistema operativo y sus aplicaciones es generalizada, es decir que todas aquellas aplicaciones que compartan estos elementos podrán ser accedidas por el programa lector de pantalla. 9 3.2 LIMITACIONES Desde su etapa inicial, la investigación se vio limitada por los siguientes factores: • Falta de promoción y conocimiento en El Salvador, de la existencia y utilidad de las medidas y herramientas de accesibilidad. • Ausencia de investigaciones, estudios previos, o personal capacitado, que provean información sobre el desarrollo de las herramientas de accesibilidad del tipo a realizar en el proyecto. Los factores antes mencionado impiden en gran mediad el desarrollo de una aplicación de mayor alcance y funcionalidad. Por ello, la aplicación a realizar no incluirá todas las características que debería poseer un lector de pantalla para ser un sistema totalmente funcional, por tanto queda a nivel de prototipo de investigación. Las limitaciones que presenta el prototipo son las siguientes: • El prototipo desarrollado es de nivel básico, y se basa en el reconocimiento de objetos estándares del sistema operativo. • La aplicación puede ejecutarse únicamente bajo los sistemas operativos Windows 95/98. • En la vista “detalles” de un objeto tipo vista de lista, sólo reconoce el nombre de los ítems pertenecientes a este objeto. • Dado que los controles estáticos no pueden aceptar el enfoque del teclado, sólo se reconocen en casos específicos, como al estar asociados a un cuadro de edición, o a un cuadro de combos. 10 • No puede leer algunos cuadros de lista que se despliegan dentro de los controles de tipo cuadros de combos. • No puede detectar el nombre de la ventana que se escoge mediante la combinación de teclas Alt + Tab, sino hasta el momento en que alguna se convierta en la ventana activa. • No puede reconocer los ítem del submenú Nuevo, que es parte tanto del menú contextual como del menú Archivo del Explorador de Windows. • Al acceder a la opción de búsqueda del sistema operativo y realizar la búsqueda de un determinado elemento, no reconoce cuando la búsqueda haya finalizado. • Durante la exploración de un objeto de vista de árbol no es posible reconocer cuando un ítem esta expandido o contraído. • El reconocimiento de las aplicaciones Microsoft Word y Microsoft Excel, se realiza a un nivel básico. No se reconocen detalles como el formato o color del texto. La Mayoría de los cuadros de diálogo utilizados en estas aplicaciones no utilizan controles estándares, por lo que no pueden ser reconocidos. 11 IV. MARCO TEÓRICOIV. MARCO TEÓRICOIV. MARCO TEÓRICOIV. MARCO TEÓRICO 4.1 LECTOR DE PANTALLA Generalidades El lector de pantalla (Screen Reader, en inglés) es un programa de computadora que realiza la detección del tipo, estado, y texto, de los distintos elementos presentes en la pantalla, tales como ventanas, íconos, menús, y botones, entre otros. A medida que la información es detectada, el programa recurre a un sintetizador de voz para hacerla llegar al usuario como una voz artificial que se escucha a través de los altavoces de la computadora. Estos programas se utilizan principalmente como herramientas que permiten o facilitan la utilización de una computadora a las personas no videntes o con poca visión. Sin embargo, dadas sus características, los lectores de pantalla también suelen ser utilizados para tareas específicas tales como la lectura automática de mensajes y documentos de texto, y la confirmación auditiva de las teclas presionadas, y de las opciones o comando seleccionados en la pantalla. Las primeras versiones de lectores de pantalla fueron diseñadas para leer solamente texto, puesto que en ese entonces los sistemas operativos (como DOS y UNIX) eran basados en texto. Estas versiones encontraron dificultades al surgir los sistemas operativos con interfases gráficas para los usuarios (en inglés, Graphical User Interface ó GUI), como Windows y Mac OS, en los cuales el texto dejaba de ser el único recurso que debía ser atendido. Sin embargo, las versiones recientes han superado estos problemas y realizan la detección de la información que presentan en pantalla los nuevos sistemas operativos. Algunos de los programas disponibles en el mercado se presentan en la tabla 4.1. Todos ellos funcionan para los sistemas operativos Windows. Algunos se utilizan tanto para Windows como para el DOS, y otros tienen versiones para Windows y Macintosh. 12 Tabla 4.1 Lista de Programas Lectores de Pantalla Programa Sistema Operativo Fabricante ASAP Windows MicroTalk Simply Talker 98 Windows 98 EconoNet International Speech Series HAL Dolphin Systems JAWS Windows Henter – Joyce Inc. OutSpoken Macintosh / Windows ALVA Access Group Inc. Screen Reader/2 Windows, OS2, y DOS IBM Screen Power Telesensory Corp. Windows Bridge Syntha – Óbice Computers, Inc. Window Eyes GW Micro WINKLINE Windows Speech Systems for the Blind WinVision Windows & DOS Artic Technologies Para trabajar con una herramienta de este tipo, el usuario utiliza el teclado de la computadora tal como lo haría con cualquier otra aplicación, es decir, para interactuar con el sistema operativo y las aplicaciones desarrolladas para el mismo. La aportación de la herramienta consiste en que a medida que el usuario navega en los programas y aplicaciones, recibe a través de los altavoces, indicaciones sobre las teclas presionadas, la ubicación tras cada movimiento realizado, los mensajes desplegados en pantalla, y el texto, tipo, y estado del elemento hacia el que se ha desplazado. Algunos lectores de pantalla también permiten utilizar dispositivos conocidos como matrices braile (braille displays, en inglés), los cuales se conectan externamente a la computadora y tienen la finalidad de representar en alfabeto braile el texto detectado en la pantalla. Estos dispositivos contienen un número fijo de celdas que son utilizadas para la representación de los caracteres braile correspondientes a las letras que forman el texto detectado por el lector de pantalla. El usuario no vidente (y con conocimientos en la técnica de lectura braile) realiza la lectura de la información detectada, colocando su mano sobre dichas celdas. 13 El teclado de la computadora se coloca usualmente por encima del dispositivo, teniendo de esta forma un fácil acceso tanto a la matriz como al teclado convencional. Si bien esta tecnología provee, junto al sintetizador, mayor soporte al usuario, su principal desventaja radica en su alto costo. Los precios de éstos dispositivos resultan más elevados que el del propio lector de pantalla, y dependen en gran medida del número de celdas con las que cuenten. En promedio, un dispositivo de 40 celdas cuesta alrededor de seis mil dólares. La tecnología de síntesis de voz (en la mayoría de los casos incluida en el lector de pantalla) en contraste, resulta mucho más económica y sustituye eficientemente el sentido de la vista por el sentido del oído. Estructura Básica En forma general, la estructura básica de un lector de pantalla involucra la ejecución de distintos procesos en los que tienen lugar, la detección de información, la conversión de la información detectada a texto, y la conversión del texto a voz, proceso conocido como síntesis de voz. En algunos casos, la aplicación lee datos contenidos en archivos (scripts) que se adicionan a la misma con el objetivo de complementar la información detectada. Figura 4.1 Matriz Braile 14 Todas las etapas que componen el proceso de detección de información, pueden ser ubicadas dentro de un bucle principal en el que constantemente se verifican cambios ocurridos en la pantalla de la computadora, debido a la pulsación de teclas, a la activación de ventanas, y a la selección o modificación de los objetos (botones, íconos, ítems de menú, y cuadros de texto, por ejemplo) que las componen. Al ser detectada alguna información, ésta se convierte en una cadena de texto, que es el formato de datos aceptado por el sintetizador de voz. Una vez que el texto llega a este componente del lector de pantalla, el proceso de síntesis genera una voz artificial que se transmite al usuario a través de los altavoces de la computadora. Figura 4.2 Estructura Básica de un Lector de Pantalla 15 • Teclas Presionadas Etapa que consiste en la detección de las teclas presionadas por el usuario. Con un lector de pantalla, como en toda aplicación, el usuario utiliza el teclado de la computadora para interactuar con el sistema operativo y las aplicaciones desarrolladas para el mismo. A través del teclado se generan distintas acciones ante las que el sistema operativo y sus aplicaciones deben responder. Entre éstas se tiene la ejecución o finalización de una aplicación, la navegación sobre los distintos elementos que la componen, la selección de objetos, y la escritura de texto. El lector de pantalla también responderá a las acciones que el usuario genera con el teclado, realizando la detección de los posteriores cambios que tienen lugar en los objetos presentes en la pantalla, y la detección de las teclas presionadas. Éstas se identifican mediante un código que es específico para cada una de ellas. Posterior a la identificación, se da a conocer la tecla presionada, asignando una cadena de texto que se envía al sintetizador de voz para ser escuchada por los altavoces. En ocasiones, recibir la información de las teclas presionadas puede resultar innecesario. Al desplazarse por distintos elementos, es posible que sea de mayor utilidad escuchar únicamente los ítems que son seleccionados. Por esta razón la confirmación de teclas presionadas suele brindarse como parte de las opciones de configuración. • Ventana Activa Etapa que consiste en la detección del título de la aplicación o ventana activa, es decir aquella que recibe las entradas del teclado. El lector de pantalla permanece constantemente verificando si la ventana que captura las entradas del teclado ha cambiado, situación que puede 16 presentarse cuando el usuario abre una nueva aplicación o ventana para trabajar en ella. Al detectar una nueva ventana activa, el lector de pantalla recupera el texto presente en la barra de título de dicha ventana. Esta operación ocurre igualmente cuando el usuario se desplaza hacia ventanas que ya han sido creadas, o en general cada vez que una nueva ventana se convierte en la ventana activa. Dado que la información (el título de la ventana activa) se recupera como una cadena de texto, se envía directamente al sintetizador de voz para ser escuchada por los altavoces de la computadora. • Objetos Generales Etapa que consiste en la detección del tipo, estado, y texto contenido en objetos generales pertenecientes a la ventana activa. Los objetos son considerados generales ó estándares, cuando son definidos por el sistema operativo, es decir que éste provee los métodos para acceder sus características, entre las que se incluyen, el tipo de objeto, su estado, y su contenido. La barra de menús contenida en la aplicación NotePad, constituye un ejemplo de un objeto estándar. Al seleccionar el ítem Word Wrap perteneciente al menú Edit, como se muestra en la figura, el lector de pantalla usualmente detecta la siguiente información acerca del objeto: Figura 4.3 Ejemplo de Barra de Menús Estándar (Menú de NotePad) 17 ! Tipo de Objeto: “ítem de menú” ! Contenido: “Word Wrap” ! Estado: “Chequeado” Los objetos estándar son creados y definidos por el sistema operativo con el fin de proveer a los programadores, elementos listos para acoplar a las interfases gráficas de sus aplicaciones. Este hecho facilita el trabajo que realizan herramientas como los lectores de pantalla, dado que para todas las aplicaciones que contengan objetos generales de un mismo tipo, el proceso de detección a utilizar será el mismo. • Objetos Específicos Etapa que consiste en la detección del tipo, estado, y texto contenido en objetos pertenecientes a la ventana activa, y que no forman parte del conjunto de objetos definidos por el sistema operativo. Estos objetos son definidos por la aplicación específica a la que pertenecen. El acceso a sus características es posible mientras la aplicación provea los métodos para realizarlo. Como ejemplo, una hoja de cálculo de Excel, o un documento de Word, constituyen objetos creados y definidos por dichas aplicaciones, y es poco probable que otros programas (fuera de la familia de productos Microsoft Office) los utilicen y definan como lo hacen sus respectivas aplicaciones. Objetos como éstos, son usualmente detectados atendiendo a la aplicación a la que pertenecen, y de acuerdo a los métodos definidos por las mismas. La ventaja de utilizar otros objetos, además de los ofrecidos por el sistema operativo, reside en la capacidad de mejorar la apariencia o interacción de las aplicaciones, y en general de no limitar la creatividad o las necesidades del diseñador de aplicaciones. Sin embargo, para un lector de pantalla tal libertad podría representar un obstáculo en su tarea de informar al usuario no vidente 18 sobre lo que está ocurriendo en pantalla, si se trabaja únicamente en los aspectos visuales o funcionales, sin tomar en cuenta cómo otras aplicaciones podrían tener acceso a sus elementos. Por esta razón, en términos de accesibilidad, el mayor compromiso que se adquiere al utilizar este tipo de objetos en las aplicaciones, es el de proveer los métodos necesarios para asegurar que la aplicación podrá ser reconocida por herramientas como los lectores de pantalla. • Scripts Etapa que consiste en complementar los procesos de detección de información sobre los objetos que componen la ventana activa. Durante las etapas de detección de información, el lector de pantalla puede auxiliarse de scripts ya sea para complementar la información acerca de los objetos o para hacer posible la detección de la misma. Cada script se define para una aplicación específica, y contiene información adicional para llevar a cabo la detección de objetos en dicha aplicación, para incorporar nuevas teclas de acceso, o para proporcionar información adicional acerca de la misma. Algunos scripts ofrecen como ventaja adicional, que el código del lector de pantalla no necesita ser modificado para hacer posible la interacción con otras aplicaciones. En su lugar, la información que posibilita dicha interacción se incluye en estos archivos, y sólo se agregan en un directorio ya conocido por el lector de pantalla. Los scripts son de bastante ayuda para incrementar y mejorar la capacidad de detección de los lectores de pantalla. Sin embargo, no todos los lectores de pantalla utilizan scripts, y como consecuencia, posibilitan únicamente la interacción con las aplicaciones para las que fueron diseñados y para aquellas que contienen objetos estándar. 19 • Texto En todos los procesos de detección de información que se llevan a cabo en un lector de pantalla, se busca que ésta sea transmitida al usuario mediante una voz sintetizada. El componente que realiza este último proceso (el sintetizador de voz) requiere que dicha información le sea proporcionada como una cadena de texto. Cuando el formato de la información recuperada sobre los objetos, corresponde al de una cadena de texto, como en el caso del título de una ventana, o el contenido de un ítem de menú, dicha cadena le es proporcionada directamente al sintetizador de voz para que éste transmita la información por los altavoces de la computadora. Toda información detectada que no corresponda a texto, debe ser traducida a este formato. Esto ocurre por ejemplo, al realizar la detección de las teclas presionadas, y del estado de los objetos, donde la información recuperada corresponde a códigos numéricos a los que debe asociarse una cadena de texto según el significado de dichos códigos. • Sintetizador de Voz Componente que recibe la información detectada en formato de cadena de texto, y que realiza posteriormente el proceso de síntesis de voz para transmitirla al usuario a través de los altavoces de la computadora. La síntesis de voz, proceso de generar voz a partir de texto, es una emulación del proceso de habla generado por el ser humano a través de las cuerdas vocales. Anteriormente se empleaban circuitos integrados especializados para llevar a cabo el proceso de síntesis. Tales circuitos eran incluidos en aparatos externos que se comunican vía serie con la computadora, y que disponen de un altavoz para escuchar la voz generada. También se incluían en tarjetas para ser adaptadas internamente a la computadora. En ambos casos, el sistema de síntesis de voz implicaba adicionar hardware a la computadora. Hoy en día las computadoras cuentan con su propio sistema de sonido, por lo que no necesitan incorporar hardware adicional, y la síntesis de voz es realizada vía software a través de los motores TTS (Text to Speech) o sistemas de conversión de texto a voz, cuya arquitectura se presenta en la figura 4.4. El proceso inicia cu de texto (como “Ho convierte números puntos, comas, y si incluso realiza la pro Una vez que el tex deben ser enfatizad de tiempo más prolo A continuación, el m sea buscándolas en de cálculo. Luego pronunciación es o describe numéricam S Figura 4.4 Arquitectura de un Motor TT 20 ando la aplicación le proporciona al motor TTS una cadena la Mundo” en la figura 4.4). El módulo analizador de texto en palabras, identifica signos de puntuación tales como gnos de admiración; convierte abreviaciones a palabras; e nunciación de siglas. to es convertido a palabras, el motor analiza qué palabras as, vocalizándolas con una mayor fuerza o por un período ngado. otor TTS determina la pronunciación de las palabras, ya un diccionario de pronunciación, o mediante un algoritmo , los fonemas son analizados gramaticalmente y su btenida de una base de datos de fonemas a sonidos, que ente como deberían sonar los fonemas. 21 Finalmente los valores que representan a los sonidos, son tratados mediante técnicas de procesamiento de señales para ser enviados como una señal digital de audio hacia la tarjeta de sonido de la computadora, y posteriormente ser escuchados a través de los altavoces. Métodos de Detección El proceso más importante que se realiza en un lector de pantalla lo constituye la detección de información. Describir la forma específica en que cada uno de estos programas lleva a cabo dicha proceso constituye una tarea muy difícil, dado que ese tipo de información por lo general es reservada. Algunas publicaciones electrónicas sobre lineamientos de accesibilidad tratan aspectos generales sobre la detección de información. Particularmente, una publicación de Adobe Systems titulada “Designing Accesible Electronic Forms”1, menciona que las herramientas de accesibilidad emplean tres métodos diferentes para recolectar información sobre los objetos presentes en la pantalla: Mensajes de Windows, Active Accesibility, y el Off-Screen Model. 1. Mensajería de Windows Cuando los objetos poseen controladores de ventana propios, las herramientas pueden ser informadas por el sistema operativo (a través de su sistema de mensajes) acerca de cuándo ocurre la creación o destrucción de dichos objetos. Además mediante los controladores, es posible acceder a la clase de ventana del objeto, y si se trata de una clase estándar, recuperar información sobre el objeto, como su nombre, por ejemplo. Este método es considerado el más estándar, y constituye el empleado en el desarrollo de esta investigación. 1 http://www.accelio.com/products/products_capture_designtips.cfm 22 2. Active Accesibility Las herramientas de accesibilidad pueden utilizar Active Accesibility (un conjunto de interfases desarrolladas por Microsoft) para recuperar información directamente del objeto y ser notificado cuando el objeto cambia. Esta interfaz es soportada automáticamente por los controles estándar de Windows y también puede ser soportada por controles o clases personalizadas. 3. Off-Screen Model Las herramientas de accesibilidad pueden monitorear las operaciones de dibujo que colocan texto en la pantalla, y crear un modelo sobre los contenidos de la misma (off-screen model). Sin embargo este método se basa en soluciones complejas e hipotéticas, y aún no proveería información acerca del significado del texto o de los gráficos. Por esta razón es considerado como el último recurso para la detección de la información presente en pantalla. 23 4.2 PROGRAMACIÓN BASADA EN WINDOWS (WIN32) Generalidades Windows es un sistema operativo que provee tres características principales: una interfaz gráfica de usuario, capacidad multitarea, e independencia de dispositivos hardware. La capacidad multitarea consiste en permitir al usuario, ejecutar simultáneamente muchas aplicaciones o muchas “copias” de la misma aplicación. La independencia de dispositivos hardware se refiere a que se libera al programador de tener que incluir en sus aplicaciones los controladores (drivers) para cada tipo de dispositivo de entrada o salida (tarjeta de video, teclado, mouse, e impresora, por ejemplo) con los que la aplicación interactúa, permitiendo que ésta se ejecute en una variedad de configuraciones de hardware. La primera característica (descrita en la siguiente sección) es la más apreciable, y dado que en ella se definen los elementos de la aplicación que serán visibles en la pantalla, adquiere gran importancia para el desarrollo de un lector de pantalla basado en este sistema operativo. Interfaz Gráfica de Usuario El concepto clave a tratar, cuando se habla de la interfaz gráfica que Windows proporciona al usuario, lo constituye la ventana. Una ventana, es un área rectangular de la pantalla en la que una aplicación despliega su salida, y en la que recibe los datos de entrada del usuario. De esta forma la ventana constituye la interface entre el usuario y la aplicación. Todas las aplicaciones de Windows que cuentan con interfaces gráficas, crean al menos una ventana, que se conoce usualmente como la ventana principal. Generalmente, la mayoría de aplicaciones utilizan diferentes tipos de ventanas además de su ventana principal. Entre dichas ventanas se encuentran los controles, cuadros de diálogo, y cuadros de mensaje. 24 Un control es una ventana utilizada por una aplicación para obtener información especifica del usuario, como el nombre de un archivo que requiere ser abierto, o el tipo de letra a utilizar para escribir en un documento, por ejemplo. Los controles se utilizan con mayor frecuencia dentro de los cuadros de diálogo, pero también pueden ser utilizados en otras ventanas. En general, las aplicaciones utilizan los controles junto con otras ventanas para llevar a cabo tareas de entrada y salida. Figura 4.5 Cuadro de Diálogo “Ejecutar” Los cuadros de diálogo son ventanas que contienen uno o más controles, y son utilizados por las aplicaciones para pedir al usuario los datos necesarios para completar alguna tarea. Figura 4.6 Cuadro de Mensaje “Confirmar Eliminación” Los cuadros de mensaje son ventanas que despliegan notificaciones, advertencias o alertas para el usuario. Por lo general, la mayoría de cuadros de mensaje utilizan como parte de su interfaz visual, dos tipos específicos de controles: controles estáticos y botones de comando. Éstos forman parte de los tipos de controles descritos a continuación. 25 - Controles Predefinidos: El sistema operativo Windows provee a las aplicaciones varias clases de ventana predefinidas mediante las que se pueden crear e incorporar diferentes tipos de controles a sus interfaces gráficas. Los controles pertenecientes a estas clases de ventana son llamados controles predefinidos; entre éstos se tienen los siguientes: !! BUTTON (BOTÓN) Un botón es un control que el usuario puede presionar para proporcionar datos de entrada a una aplicación. Existen diferentes tipos de botones; los más comunes son: los botones de comando, de chequeo, y de opción. • Push Button (Botón de Comando) Un botón de comando es un rectángulo que contiene texto definido por la aplicación (una etiqueta), o un ícono o mapa de bits, para indicar lo que el botón hace cuando el usuario lo presiona. Típicamente, un botón de comando es utilizado para iniciar una operación. • Check Box (Botón de Chequeo) Un botón de chequeo posee un pequeño cuadro y una etiqueta que indica una opción que se elige al colocar un cheque sobre el cuadro. Una aplicación puede contener botones de chequeo agrupados para permitir al usuario escoger de manera independiente distintas opciones sobre un mismo conjunto. Figura 4.7 Botón de Comando Figura 4.8 Botón de Chequeo 26 • Radio Button (Botón de Opción) Este control contiene varias opciones indicadas en etiquetas, de entre las cuales el usuario puede elegir sólo una, al seleccionar el botón. Una aplicación usa comúnmente estos botones agrupados para permitir al usuario escoger en forma excluyente opciones sobre un mismo conjunto. !! COMBO BOX (Cuadro de Combos) Un cuadro de combos es un control que puede contener una lista de opciones predeterminadas, de entre las cuales el usuario puede elegir. Algunos también permiten agregar a la lista opciones introducidas mediante el teclado. !! EDIT (Cuadro de Edición) Un control edit permite introducir y editar texto desde el teclado. Se utilizan comúnmente en los cuadros de diálogo para solicitarle información específica al usuario. !! STATIC (Control Estático) Mediante el control estático, una aplicación provee al usuario información en formato de texto o gráficos. Usualmente las aplicaciones utilizan estos controles para etiquetar otros controles como los cuadros de edición, y los cuadros de combo. Figura 4.9 Botón de Opción Figura 4.10 Cuadro de Combos Figura 4.11 Cuadro de Edición 27 !! MENU BAR (Barra Menús) Es un control formado por menús que contienen opciones. A su vez, estas opciones (conocidas como ítems de menú) pueden convertirse en submenús al contener otras opciones dentro de ellas. Algunas opciones realizan funciones específicas al ser elegidas, mientras que otras activan y desactivan características de las aplicaciones. !! LIST BOX (Cuadro de Lista) Contiene una lista de ítems de entre los cuales el usuario puede elegir. Los ítems pueden representarse por cadenas de texto con o sin íconos. Usualmente se realizan operaciones sobre el ítem elegido, a través de otros controles. - Controles Comunes (Common Control) Los controles comunes son un conjunto de ventanas implementadas por la librería de controles comunes, la cual es una librería de enlace dinámico incluida en el sistema operativo Windows. Como otras ventanas que representan controles, un control común es una ventana hija utilizada por una aplicación en conjunto con otras ventanas para desempeñar tareas de entrada / salida. Los siguientes tipos de controles forman parte de los controles comunes utilizados por el sistema operativo: Figura 4.12 Barra de Menús Figura 4.13 Cuadro de Lista 28 !! List View (Vista de Lista) Contiene una colección de ítems, que consisten en un ícono con etiqueta. En ocasiones, los ítems pueden representan elementos del sistema operativo como archivos, carpetas y unidades de disco. Estos controles poseen diferentes formas para arreglar sus ítems y para desplegarlos en forma individual. !! ToolBar (Barra de Herramientas) Es un control que contiene uno o más botones con imágenes, texto, o ambos. Comúnmente, los botones en las barras de herramientas corresponden a ítems que se encuentran en el menú de la aplicación, de esta manera se provee una forma adicional y más directa de acceder a los comandos de una aplicación. !! Tree View (Vista de Árbol) Es una ventana que despliega una lista jerárquica de ítems, tales como los archivos y directorios en un disco. Cada ítem contiene un ícono con etiqueta, y puede tener una lista de subítems asociados. Al elegir el ítem, el usuario puede expandir o contraer la lista de subítems que se encuentra dentro del ítem. Figura 4.14 Vista de Lista Figura 4.15 Barra de Herramientas Figura 4.16 Vista de Árbol 29 !! Tab Control (Fichero) Un Tab Control es análogo a los separadores de una libreta. Con este control, una aplicación puede definir diferentes fichas utilizando la misma área de la ventana. Cada ficha reúne cierto tipo de información o un grupo de controles que se muestran cuando el usuario selecciona la ficha. Todos los controles mencionados anteriormente, al igual que todas las ventanas en Windows, pertenecen a una clase de ventana, la cual contiene una serie de atributos que el sistema operativo utiliza como plantilla para crear la ventana. Además, toda clase de ventana posee un procedimiento de ventana compartido por todas las ventanas pertenecientes a la misma clase. Junto con la clase de ventana, el procedimiento de ventana (descrito en la siguiente sección) define la mayoría de características relacionadas a la apariencia y comportamiento de una ventana. El sistema operativo Windows registra algunas clases (conocidas como clases del sistema) durante su carga inicial, para que puedan ser utilizadas por todas las aplicaciones. La tabla 4.2 muestra algunas clases del sistema dentro de las que se encuentran las correspondientes a los controles predefinidos y a los cuadros de diálogo. La mayoría de clases de los controles comunes están definidas dentro de la librería de controles comunes Comctl32.dll. Tanto para los controles predefinidos, como para los comunes, las aplicaciones utilizan funciones definidas por el sistema operativo para crearlos y manipularlos. Figura 4.17 Fichero 30 Tabla 4.2 Clases del Sistema Nombre Descripción Button La clase para un botón ComboBox La clase para un combo box Edit La clase para un cuadro de edición ListBox La clase para un cuadro de lista ScrollBar La clase para una barra de desplazamiento Static La clase para un control estático #32768 La clase para un menú #32769 La clase para la ventana del escritorio #32770 La clase para un cuadro de diálogo Introducción a la Programación Basada en Windows Las distintas ventanas que Windows presenta en la pantalla de la computadora son administradas por dicho sistema operativo, asignando a cada una un valor numérico único conocido como controlador de ventana (window handle ó hwnd) que utiliza para identificarla. El sistema verifica continuamente si han ocurrido eventos en las ventanas. Éstos pueden producirse mediante acciones del usuario, como hacer clic con el mouse o presionar una tecla, mediante programación, como modificar el estado de un control a través de código, o incluso como resultado de las acciones de otras ventanas. Cada vez que se produce un evento, se envía un mensaje al sistema operativo. Éste procesa el mensaje y lo transmite a la ventana o ventanas a las que afecta dicho mensaje para que puedan realizar la acción apropiada, basándose en sus propias instrucciones para tratar ese mensaje en particular. 31 • Mensajes Cuando el usuario trabaja con una aplicación basada en Windows, interactúa con ella a través del teclado o del ratón, seleccionando alguna opción de menú, arrastrando su ventana, o redimensionando su tamaño, por ejemplo. La ventana recibe todas estas entradas o eventos generados por el usuario en forma de mensajes. Desde el punto de vista de la aplicación, el mensaje es visto como una notificación acerca de la ocurrencia de algún evento, el cual puede o no requerir una acción determinada. El efecto neto de este sistema de comunicación, es que las aplicaciones están orientadas hacia el procesamiento de mensajes. Todos los mensajes son dirigidos hacia una ventana, e independientemente de su tipo, poseen los siguientes parámetros: un controlador de ventana, el tipo de mensaje, y dos valores que contienen información adicional del mensaje e identificados comúnmente con los nombres wparam, y lparam. En las versiones de 32 bits de Windows (Win32), estos cuatro parámetros son valores numéricos con un tamaño predefinido de 32 bits. El primer parámetro que se especifica en un mensaje es el controlador de la ventana a la cual se dirige el mensaje. En un ambiente de programación orientada a objetos, un controlador es simplemente el identificador de un objeto, y en este caso particular, se trata del identificador de la ventana hacia la que se dirige el mensaje. Con frecuencia, los controladores hacen referencia a un objeto definido en forma de estructura que está ubicado en una región de memoria que puede ser reubicada. Sin embargo, es importante aclarar que aunque dicha región pueda ser trasladada hacia otra ubicación en algún momento dado, el controlador permanece inalterado. De esta forma, Windows maneja la memoria sin que estos cambios sean visibles para la aplicación. 32 El segundo parámetro especificado en un mensaje es el tipo de mensaje. Cada tipo de mensaje tiene un valor numérico constante de 32 bits, definido en formato hexadecimal. Usualmente, es nombrado con letras utilizadas como mnemónicos seguidas por un carácter de subrayado, y finalmente una palabra utilizada como descriptor. El tipo más común de mensajes que una aplicación debe procesar son los mensajes de ventana. Algunos ejemplos de estos mensajes son: WM_CREATE, y WM_MENUSELECT, para los cuales WM indica Window Message (mensaje de ventana). Los controles poseen también sus propios tipos de mensaje, y cuando sea necesario, una aplicación puede crear y registrar sus propios tipos de mensajes, los cuales se conocen como mensajes privados. El propósito de los últimos dos parámetros, es el de proveer información adicional que es necesaria para interpretar el mensaje, y dado que se emplean distintos tipos de mensajes, sus valores varían de acuerdo a dichos tipos. Como ejemplo, cuando el ratón se mueve por encima de una ventana, ésta recibe el mensaje WM_MOUSEMOVE (cuyo valor hexadecimal es 11F). En este mensaje, el valor de wparam indica si se han presionado las teclas CONTROL, SHIFT, o los botones del ratón, mientras que el valor de lparam indica las coordenadas del cursor. • Procedimientos de Ventana Todas las ventanas poseen una función conocida como procedimiento de ventana, la cual se encarga de procesar todos los mensajes que llegan a la misma. El comportamiento de las ventanas dependerá de las respuestas que este procedimiento genere ante los mensajes. Como se sabe, toda ventana pertenece a una clase de ventana en particular. La clase de ventana determina el procedimiento de ventana que una ventana individual utilizará para procesar sus mensajes. Todas las ventanas pertenecientes a la misma clase, utilizan el mismo procedimiento de ventana. 33 El procedimiento de ventana recibe como argumentos, los cuatro parámetros asociados con todo mensaje: el controlador de ventana, el tipo de mensaje, y los parámetros de información adicional wparam, y lparam., y devuelve un valor de 32 bits cuya interpretación depende del tipo de mensaje. Un procedimiento de ventana típico presenta una estructura como la siguiente: < Nombre del Procedimiento de Ventana > (Controlador, Mensaje, wParam, lParam) Inicio de la función Dependiendo de Mensaje En caso de ser WM_CREATE Inicializar la ventan y retornar 0 En caso de ser WM_PAINT Actualizar el área de dibujo de la ventana y retornar 0 En caso de ser WM_SIZE Asignar posición y tamaño de la ventana y retornar 0 En caso de ser WM_DESTROY Terminar la aplicación y retornar 0 En caso de ser Procesar este mensaje En caso de no ser alguno de los anteriores Devolver parámetros de mensaje al procedimiento de ventana por defecto y retornar respuesta Fin de la función El procedimiento de ventana utiliza el argumento “Mensaje” dentro de una sentencia de selección de casos para manejar diferentes mensajes. Para cada caso, el procesamiento del mensaje retorna un valor (que depende del tipo de mensaje) para indicar que el mensaje ha sido procesado. Por lo general, cuando se reciben mensajes que no están incluidos en los casos posibles, suelen enviarse a un procedimiento de ventana conocido como procedimiento de ventana por defecto, para asegurar el procesamiento de todos los mensajes que llegan a una ventana. Esto se realiza a través de la llamada a la función DefWindowProc, la cual acepta como argumentos los cuatros parámetros asociados con el mensaje que llega al procedimiento de ventana. 34 • Subclasificación Cuando una aplicación crea una ventana, el sistema operativo utiliza un bloque de memoria para almacenar información específica de la ventana. Entre dicha información se encuentra la dirección del procedimiento de ventana que procesa los mensajes que llegan a ella. Cuando el sistema necesita enviar un mensaje a la ventana, busca la dirección del procedimiento de ventana asociado a la misma, y pasa el mensaje a dicho procedimiento para que sea procesado. A través de la técnica conocida como subclasificación (subclassing, en inglés), la aplicación puede interceptar los mensajes que llegan a las ventanas que ha creado, antes de que ésta pueda procesarlos. Utilizando esta técnica, una aplicación puede extender, modificar, o monitorear el comportamiento de una ventana particular. La aplicación subclasifica a una ventana reemplazando la dirección del procedimiento de ventana original de dicha ventana, con la dirección de un nuevo procedimiento de ventana, conocido como procedimiento de subclasificación. Posteriormente, este procedimiento recibe los mensajes enviados hacia la ventana, los cuales puede modificar para luego devolverlos al procedimiento de ventana original, o procesarlos y no devolverlos al procedimiento original. • Hooks Un enlace o hook, es un punto o ubicación dentro del mecanismo de manejo de mensajes del sistema operativo en donde una aplicación puede instalar una subrutina para monitorear el tráfico de mensajes en el sistema, y procesar cierto tipo de mensajes antes que lleguen a su procedimiento de ventana destino. 35 El sistema operativo Windows, soporta diferentes tipos de hooks; cada uno proporciona acceso a diferentes aspectos del mecanismo de manejo de mensajes. Para poder capturar la información que transportan los mensajes que se desea monitorear, la instalación de un hook va acompañada con la especificación de la dirección de un procedimiento conocido como procedimiento de hook, el cual es utilizado para hacer llegar dicha información. Entre los distintos tipos de hooks disponibles se encuentran, WH_KEYBOARD HOOK, el cual permite monitorear el tráfico de mensajes asociados al evento de pulsar teclas, WH_MOUSE, para monitorear mensajes asociados a eventos generados con el mouse, WH_CALLWNDPROC, para el monitoreo de mensajes enviados al procedimiento de ventana a través de la función SendMessage, y WH_GETMESSAGE, el cual permite monitorear mensajes que están apunto de ser retornados por la función GetMessage. 4.3 INTRODUCCIÓN A LA API DE WINDOWS ¿Qué es una API? La Interfaz de Programación de Aplicaciones (API), sirve como una interfaz de software que las aplicaciones utilizan para solicitar al sistema operativo de la computadora la realización de distintas tareas de nivel inferior. Una API puede ser considerada como el nivel fundamental de la programación de alto nivel. Frecuentemente, en la programación de alto nivel, un programa no ejecuta tareas por sí mismo, en lugar de ello, transfiere dichas tareas a otros programas. En el caso de sistemas operativos, los programas frecuentemente delegan varias tareas al sistema operativo. Por ejemplo, si un programa desea escribir datos en un disco, no envía directamente al disco los 36 comandos para buscar, leer, y escribir. En su lugar, simplemente le indica al sistema operativo que escriba una cierta cantidad de datos en un archivo específico, y el sistema operativo maneja todo el trabajo de bajo nivel. De esta forma, los programadores no tienen que preocuparse por conocer las tareas básicas y fundamentos involucrados en todos los programas (como el acceso a discos, administración de memoria, y operaciones de dibujo), ahorrando tiempo en el diseño de sus programas y consumiendo menos espacio. Interfaz de Programación de Aplicaciones de Windows Como se mencionó anteriormente, una API maneja todo lo relacionado al control de la pantalla, acceso a discos y memoria, entre otos. El sistema operativo Windows provee a los desarrolladores de aplicaciones funciones para realizar estas tareas, a través de su interfaz de programación de aplicaciones. Sin embargo, también provee la mayoría de las características comunes a todo el software basado en Windows. Por ejemplo, los cuadros de diálogo comunes (Abrir, Guardar como, Elegir fuente, etc.), configuraciones del sistema operativo, e incluso las propias ventanas son proporcionados por la API de Windows. Los programas basados en Windows utilizan extensamente la API de Windows en la mayoría de tareas. Aunque al programar no se utilice explícitamente la API, el lenguaje de programación casi siempre incorporará llamadas a la API de Windows en el programa ejecutable que genere, para realizar distintas tareas. Ubicación de la API de Windows Casi todas las funciones de la API de Windows forman parte de librerías de enlace dinámico ubicadas en el directorio del sistema (C:\Windows\System), como user32.dll, kernell32.dll, y gdi32.dll. 37 En general, las librerías de enlace dinámico (en inglés, Dynamic Link Libraries o DLL’s) son archivos de extensión .dll que contienen procedimientos que se cargan y vinculan a una aplicación en tiempo de ejecución, en lugar de hacerlo en tiempo de compilación. Esto implica que las bibliotecas se pueden actualizar independientemente de la aplicación. Los archivos DLL de la API de Windows exportan las funciones que contienen, lo cual significa que permiten a los programas externos utilizarlas. De esta forma, cualquier programa basado en Windows puede acceder a las distintas funciones de la API. La parte principal de las funciones API se encuentran en los archivo user32.dll (funciones de interfaz de usuario), kernel32.dll (funciones del kernel del sistema operativo), gdi32.dll (funciones de interfaz para dispositivos gráficos), y shell32.dll (funciones del shell de Windows). Componentes de la API de Windows A pesar de haber hecho referencia sólo a las funciones de la API, éstas son sólo una parte de lo que constituye completamente la API de Windows. El conjunto completo lo componen funciones, estructuras, constantes nombradas, funciones callback, y mensajes. • Funciones: Son la parte fundamental de la API de Windows. Constituyen el código que cumple con la variedad de tareas realizadas por la API. Las funciones están almacenadas en archivos DLL y pueden ser accesadas desde cualquier programa basado en Windows. • Estructuras: Son combinaciones de variables de distintos tipos, frecuentemente utilizadas en la API de Windows para almacenar información relacionada a un objeto. 38 Muchas funciones de la API requieren como argumento una estructura, con el objetivo de transferir una cantidad mayor de información sin utilizar un gran número de parámetros. • Constantes Nombradas: La API de Windows utiliza con frecuencia nombres que hacen referencia al significado de valores numéricos constantes. Los nombres de las constantes proveen una manera más conveniente para referirse a estos valores en el código. • Funciones Callback: Una función callback es una función definida en el programa, que es llamada por una función de rutina de la API cuando ésta ejecuta su tarea. Algunas funciones de la API requieren definir este tipo de funciones para complementar alguna tarea específica. • Mensajes: En cierta forma los mensajes son un tipo especial de constantes nombradas. A pesar de ser también valores numéricos con nombres asociados, se comportan de manera distinta. Los mensajes son enviados a los objetos (especialmente ventanas) para que lleven a cabo alguna acción. 4.4 OBJETOS ESPECÍFICOS Como se mencionó anteriormente, el acceso a objetos específicos se realiza a través de los medios definidos por la aplicación a la que pertenecen, a diferencia de objetos como los controles predefinidos y comunes, definidos por el sistema operativo. 39 Particularmente, las aplicaciones de Microsoft Office dan a conocer su funcionalidad como un conjunto de objetos programables. Estas aplicaciones integran el Editor de Visual Basic (ubicado en el ítem Macro del menú Herramientas) como herramienta para automatizar tareas dentro las mismas utilizando las propiedades y métodos de estos objetos. De esta forma es posible trabajar dentro de Microsoft Word o Microsoft Excel con los datos de sus propias aplicaciones. Objetos y Modelos de Objeto Un objeto puede ser una parte de una aplicación, como un control o una ventana, o también puede ser la aplicación entera. En términos de A nivel de programación, un objeto puede ser visto como una combinación de código y datos que pueden ser tratados como una unidad. La funcionalidad de una aplicación se refiere a todas las formas con las que se puede trabajar sobre su contenido. Este último se refiere a los elementos que la aplicación contiene, tales como los documentos y las palabras, números y gráficos incluidos en los mismos. Comúnmente se trabaja con el contenido de una aplicación abriendo, cerrando, copiando, o modificando sus elementos. El contenido y la funcionalidad de la aplicación se dividen en unidades discretas, conformando distintos objetos que guardan relaciones entre sí. Por lo general, los objetos más familiares para los usuarios son los elementos que forman parte de la interfaz gráfica de la aplicación, como los libros, hojas y celdas en Microsoft Excel, o los documentos y secciones en Microsoft Word. La manera en que se ordenan los objetos que componen una aplicación, junto con la forma en que se divide su contenido y funcionalidad sobre los mismos, se conoce como el modelo de objeto o jerarquía de objeto de la aplicación. Normalmente, un modelo de objeto expresa el hecho de que unos objetos son "más grandes" o “más importantes” que otros, de tal forma que contienen o se componen de otros objetos. 40 Usualmente, el objeto que se encuentra en la cima de la jerarquía es el objeto Application (Aplicación) el cual representa a la aplicación misma. Por ejemplo, el propio Microsoft Excel es el objeto Application en el modelo de objeto de Microsoft Excel. El objeto Application contiene otros objetos a los que se puede acceder sólo cuando existe el objeto Application (es decir, cuando la aplicación se está ejecutando). Cuando la existencia de un objeto depende de la existencia de otro, se dice que el primero es “hijo” del segundo, y en forma inversa, el segundo es “padre” del primero. Muchos objetos hijos tienen también sus propios objetos hijos, y al igual que un objeto padre puede tener muchos objetos hijos, un objeto hijo puede tener muchos objetos padre. Además de contener otros objetos, cada objeto en la jerarquía posee parte del contenido y funcionalidad de la aplicación, y se aplican tanto al propio objeto como a todos los objetos por debajo de la jerarquía. Entre más alta la posición en la jerarquía, más amplio es el alcance del contenido y la funcionalidad. Por ejemplo, en Microsoft Excel, el objeto Application posee el tamaño de la ventana de la aplicación, y la capacidad de cerrar la aplicación; el objeto Workbook (Libro), contiene el nombre de archivo y el formato del libro, y la capacidad de almacenarlo; y el objeto Worksheet (Hoja) posee el nombre de la hoja y la capacidad de borrarla. Algunos objetos se agrupan dentro de lo que se conoce como colección de objetos. Los objetos pertenecientes a una colección permiten ser tratados como un grupo único, y no sólo como entidades individuales. Por ejemplo, en Microsoft Word existe una colección llamada Documents (Documentos) que permite trabajar con todos los objetos Document (Documento) como un solo grupo. Por lo general, una colección de objetos se identifica con el nombre del objeto en plural, por ejemplo, para el objeto Document existe la colección Documents. En resumen, el contenido y la funcionalidad de una aplicación se divide entre los objetos que componen su modelo de objeto. En conjunto, los objetos de la jerarquía poseen todo el contenido y funcionalidad de la aplicación, mientras e individualmente, proveen acceso a áreas específicas de estos dos elementos. 41 • Objetos de Microsoft Excel Entre los objetos más comunes que forman parte de la interfaz visual de la aplicación Microsoft Excel se encuentran: Application, Workbook, Worksheet, y Range (contenido en Worksheet). Figura 4.18 Aplicación Microsoft Excel 2000 El objeto Application representa la aplicación completa de Microsoft Excel, mientras que los objetos Workbook, Worksheet, y Range, representan respectivamente, un libro, una hoja de cálculo, y una celda, fila, columna, o selección de celdas. Como se muestra en la figura 4.19, todos forman parte del modelo de objetos de esta aplicación. 42 Figura 4.19 Modelo de objeto de Microsoft Excel • Objetos de Microsoft Word Al igual que la aplicación Microsoft Excel, Word posee su propio modelo de objeto. Document, CommandBars, y Selection, constituyen ejemplos de los objetos más comunes que forman parte de su interfaz visual. 43 Figura 4.20 Modelo de objeto de Microsoft Word El objeto Application representa la aplicación completa de Microsoft Word, mientras que los objetos Document, Selection, y CommandBar, representan respectivamente, un documento, un área del documento, y una Barra de Comandos. 44 Figura 4.21 Aplicación Microsoft Word 2000 Las barras de comandos están presentes en todas las aplicaciones de Microsoft Office, y junto con otros objetos, conforman el modelo de objeto de Microsoft Office. Existen tres tipos de barras de comandos: • Popup: Equivale a un elemento de menú en una barra de menús. • ComboBox: Similar a un control ComboBox; es un botón de barra de herramientas con una flecha adjunta. Al hacer clic en la flecha, aparecen más comandos de menús con sus íconos. • Button: Equivale a un botón de barra de herramientas estándar; es un botón sobre el que aparece un ícono. 45 Figura 4.22. Objetos de las Barras de Comando (Parte del modelo de objetos de Microsoft Office) El objeto CommandBar, miembro de la colección CommandBars, combina el concepto de menús y barras de herramientas en un único objeto visual y de programación. Al ser barras de comandos, los menús contienen comandos de menú que pueden tener iconos y títulos, y pueden presentar un comportamiento similar al de los botones, conservando a la vez el formato de menú habitual. Un objeto de barra de comandos puede contener otros objetos de barra de comandos, dependiendo de su tipo. Propiedades, Métodos, y Eventos Los objetos poseen propiedades y métodos para acceder a su contenido y funcionalidad. Generalmente las propiedades se utilizan para obtener o establecer el contenido, el cual puede incluir el texto que posee el objeto o el conjunto de atributos de dicho objeto, mientras que los métodos se utilizan para obtener la funcionalidad, la cual incorpora todas las acciones que se pueden llevar a cabo con el contenido. 46 Los eventos son acciones (tales como abrir un documento, o cerrar la aplicación) reconocidas por los objetos, y para las cuales el programador escribe código que se ejecutará como respuesta a las mismas. Los eventos ocurren tanto por acciones del usuario como por código en el programa, o pueden ser disparados por el sistema operativo. Antes de utilizar las propiedades, métodos y eventos de un objeto en la aplicación, es necesario recuperar una referencia a dicho objeto. La referencia representa el acceso al objeto, y es posible recuperarla directamente, o desplazándose sobre la jerarquía de los objetos hasta alcanzar el objeto deseado. Una forma muy común de tener acceso al modelo de objeto de una aplicación, es a través del objeto más alto en la jerarquía, que usualmente es el objeto Application. Por ejemplo, para iniciar el acceso al objeto Application dentro de Microsoft Word se utiliza la expresión: Application Application es una propiedad que se utiliza para devolver una referencia a un objeto Application. Si luego se quiere descender en la jerarquía y llegar a la colección Documents, se utiliza: Application.Documents Documents es una propiedad que se utiliza para devolver una referencia a la colección Documents. En el caso de colecciones de objetos como Documents, se pueden crear nuevos objetos y añadirlos a la colección utilizando el método Add, disponible para esa colección. Si se desea utilizar dicho método para crear un nuevo documento de Word por ejemplo, se debe recuperar primero la referencia a la colección, y luego utilizar el método. La siguiente expresión lleva a cabo ambos procesos: Application.Documents.Add 47 Así mismo, para crear un nuevo libro en Microsoft Excel: Application.Workbooks.Add En las expresiones anteriores se trabaja con un método que se aplica a todos los objetos Document y Workbook como conjunto, dado que se utilizan sus colecciones respectivas. Para hacer referencia a los objetos individuales en esas colecciones, se utiliza el método Item. Por ejemplo, para cerrar un libro o documento específico (Libro1.xls o Documento1.doc) previamente abierto, los objetos Document y Worbook disponen del método Close, pero primero son necesarias las respectivas referencias. Para obtener una referencia al libro “Libro1”, se utiliza: Application.Workbooks.Item(“Libro1.xls”) Para obtener una referencia al documento “Documento1”, se utiliza: Application.Documents.Item(“Documento1.doc”) La primera expresión hace referencia a un libro llamado “Libro1”, y la segunda a un documento llamado “Documento1”. La acción completa se realiza llamando posteriormente al método Close. Para cerrar el libro “Libro1”, se utiliza: Application.Workbooks.Item(“Libro1.xls”).Close Para obtener una referencia al documento “Documento1”, se utiliza: Application.Documents.Item(“Documento1.doc”).Close En las tablas 4.3, 4.4, y 4.5, se presentan ejemplos de otras propiedades, métodos, y eventos de algunos objetos de Microsoft Word, y Microsoft Excel. 48 Tabla 4.3 Propiedades, Métodos, y Eventos para Objetos de Microsoft Word Microsoft Word Objeto Propiedad / Método / Evento Función ActiveDocument Devuelve un objeto Document que representa el documento activo. Quit Se utiliza para salir de Word. WindowSelectionChange Se produce cuando cambia la selección en la ventana de documento activo. Application Quit Se produce cuando el usuario sale de Word. Characters Devuelve una colección Characters que representa a los caracteres de un documento, intervalo o selección. Content Devuelve un objeto Range que representa el texto del documento principal. Document Close Cierra el documento especificado. Text Devuelve o establece el texto de la selección o del intervalo especificado. Selection Information Devuelve información acerca de la selección o del intervalo especificado. Tabla 4.4 Propiedades, Métodos, y Eventos para Objetos de Microsoft Excel Microsoft Excel Objeto Propiedad / Método / Evento Función ActiveCell Devuelve un objeto Range que representa la celda activa de la ventana activa o especificada. SheetActivate Ocurre cuando se activa una hoja. SheetSelectionChange Se produce cuando la selección cambia en una hoja (no se produce si la selección está en una hoja de gráfico). WorkbookBeforeClose Se produce antes de que se cierre cualquier libro. WorkbookDeactivate Se produce antes de desactivar cualquier libro abierto. Application WorkbookOpen Ocurre al abrir un libro. Adress Devuelve el nombre de las celdas que conforman el rango. Range Text Devuelve o establece el texto del objeto especificado. ActiveSheet Devuelve un objeto que representa la hoja activa. Workbook Close Cierra el libro especificado. Worksheet Name Devuelve o establece el nombre del objeto. 49 Tabla 4.5 Propiedades para Objetos de Microsoft Office Microsoft Word y Microsoft Excel Objeto Propiedades Función Application CommanBars Devuelve una colección CommandBars que representa la barra de menús y todas las barras de herramientas de la aplicación. AccState Devuelve el estado del objeto. CommandBar Controls Devuelve un objeto CommandBarControls que representa todos los controles de la barra de comandos o del control emergente. CommandBarControl Type Devuelve el tipo de control de barra de comandos. Automatización La automatización (conocida formalmente como Automatización OLE) es una interfaz de comunicación que le permite a una aplicación manipular objetos pertenecientes a otra aplicación, o exponer sus propios objetos para que puedan ser manipulados. Mediante la automatización, se proporcionan referencias a las propiedades, métodos y eventos de un objeto, para que éste pueda ser accedido desde otras aplicaciones. Los objetos de una aplicación a los que se puede hacer referencia desde otra, son conocidos como objetos de automatización. • Automatización con Microsoft Word 2000 Para que los objetos de la aplicación Microsoft Word estén disponibles mediante automatización en una aplicación creada en Visual Basic 6.0, el primer paso a realizar es la creación de una referencia a la biblioteca de objetos de dicha aplicación. Éstas están disponibles en el ítem Referencias del menú Proyecto, de Visual Basic. Una biblioteca de objetos es un archivo con una extensión de archivo .OLB que proporciona a los controladores de Automatización (como Visual Basic) información sobre los objetos de Automatización que estarán disponibles. Para 50 Microsoft Word 2000 se escoge la referencia Microsoft Word 9.0 Object Library, definida en el archivo MSWORD9.OLB. Posteriormente se debe crear una variable de objeto que hará referencia al objeto Application de Word, como se indica en el siguiente ejemplo: Dim AppWord as Word.Application Utilizando la funciones CreateObject o GetObject, proporcionadas por Visual Basic, es posible crear o recuperar una referencia al objeto de automatización; por ejemplo: Set AppWord = CreateObject(“Word.Application”) AppWord.Visible = True La función Createobject devuelve un objeto Application de Word, y lo asigna a la variable AppWord. A través de esta variable es posible utilizar los objetos, propiedades, métodos y eventos que permiten controlar la aplicación. Posteriormente, la aplicación puede hacerse visible estableciendo la propiedad Visible como Verdadera, y luego añadir un nuevo documento mediante la propiedad Add de la colección Documents, siendo el código completo: Dim AppWord as Word.Application Set AppWord = CreateObject(“Word.Application”) AppWord.Visible = True AppWord.Documents.Add Para cerrar la aplicación puede utilizarse el método Quit ( AppWord.Quit ). Cuando el objeto de automatización ya no se utilice más, es recomendable borrar las variables que hagan referencia al objeto con el fin de liberar el objeto de la memoria. Para borrar una variable de objeto, se establece a Nothing, es decir: AppWord = Nothing 51 • Automatización con Microsoft Excel 2000 Como Word, Microsoft Excel posee su propia biblioteca de objetos, EXCEL9.OLB, la cual se escoge mediante la referencia Microsoft Excel 9.0 object Library en el ítem Referencias del menú Proyecto, de Visual Basic. Tomando en cuenta los objetos, propiedades y métodos propios del modelo de objeto de Excel, se siguen los pasos expuestos anteriormente, para acceder a la aplicación, por ejemplo: Dim AppExcel as Excel.Application Set AppWord = CreateObject(“Excel.Application”) AppExcel.Visible = True AppExcel.Workbooks.Add MsgBox “Aplicación de Excel creada desde Visual Basic!!!” AppExcel = Nothing La exposición de objetos permite utilizar la funcionalidad de una aplicación en otra. Por ejemplo, un procesador de texto podría exponer su capacidad de revisión ortográfica para que pueda ser utilizada por otros programas. Por ser de gran utilidad para intercambiar información entre aplicaciones, la exposición de objetos puede ser aprovechada por las herramientas de accesibilidad para capturar la información contenida en las aplicaciones. 52 V. DISEÑO DEL PROTOTIPOV. DISEÑO DEL PROTOTIPOV. DISEÑO DEL PROTOTIPOV. DISEÑO DEL PROTOTIPO 5.1 LECTOR DE PANTALLA A DESARROLLAR Estructura Figura 5.1 Estructura del Lector de Pantalla 53 El diagrama anterior muestra la estructura interna del lector de pantalla a desarrollar. En éste se representan la serie de procesos que seguirá para la recolección de la información presente en pantalla, y que posteriormente deberá transmitir en forma oral. La estructura toma como base las características generales que se han observado en los programas lectores de pantalla, y que forman parte de la estructura básica detallada en el marco teórico de este documento. Dichas características no definen en sí mismas los métodos utilizados por estos programas para llevar a cabo cada uno de los procesos involucrados en su operación. Por el contrario, la intención del diagrama de la figura 5.1 es revelar, en términos generales, los métodos y recursos a utilizar en los distintos procesos que conformarán el prototipo. Como fue mencionado anteriormente, uno de los procesos más importantes que se realizan en un lector de pantalla lo constituye la detección de información. La estructura del prototipo a desarrollar emplea tres procesos que pueden ser considerados como los mecanismos principales para realizar las distintas etapas de detección de información: la recuperación del controlador de la ventana activa, la recuperación del controlador del objeto que posee el enfoque, y el monitoreo de mensajes a nivel de sistema. Estos procesos se ejecutan dentro de bucles en los que constantemente se actualiza la información de acuerdo a los cambios ocurridos en el sistema operativo y en las aplicaciones, provocados por acciones del usuario o por procesos internos de las mismas. • Controlador de la Ventana Activa De todos los objetos que se presentan en pantalla, la ventana que recibe las entradas del usuario (la ventana activa) será la que contenga la información que necesita ser detectada y transmitida al mismo. 54 Considerando que el acceso a todo objeto dentro del sistema operativo requiere un controlador, el primer paso para la detección de la ventana activa lo constituirá la captura de su controlador. Dicha captura se logra por medio de la función GetForegroundWindow, la cual forma parte del conjunto de funciones para ventanas proporcionadas por la API de Windows. Ya que la ventana activa puede cambiar en algún momento dado, el proceso es ubicado dentro de un bucle, con el fin de recuperar constantemente dicho controlador. Del proceso de captura del controlador de la ventana, se derivan los procesos explicados a continuación: - Clase de Ventana Toda ventana perteneciente al sistema operativo Windows, o a las aplicaciones basadas en el mismo, pertenece a una clase de ventana. Una vez que se tiene el controlador de la ventana activa es posible conocer la clase a la que ésta pertenece utilizando la función de la API GetClassName, la cual retorna una cadena de texto que representa la clase de la ventana activa. La clase de ventana puede ser utilizada para asociar ventanas a aplicaciones. Por ejemplo, la ventana correspondiente a la aplicación Microsoft Excel 2000, posee la clase “XLMAIN”. Es posible identificar si la ventana activa corresponde a la aplicación Microsoft Excel 2000, si al recuperar la clase se obtiene la cadena de texto “XLMAIN”. También es posible utilizar el nombre de clase para identificar ventanas que no poseen título. Por ejemplo, la barra de tareas de Windows no posee título, y pertenece a la clase “Shell_TrayWnd”. De esta forma es posible asociar el título “Barra de Tareas” cuando se detecta la ventana con la clase “Shell_TrayWnd”. - Titulo de la Ventana Si bien el controlador de una ventana es empleado para identificarla, no representa información útil para el usuario. En su lugar, el texto contenido en la barra de título de la ventana resulta de mayor utilidad, y formará parte de la información que será transmitida al usuario. 55 La mayoría de ventanas y aplicaciones poseen un título que las identifica y que a la vez revela su propósito. La captura del título de la ventana activa se realiza por medio de mensajes a través de la función SendMessage. Especificando el mensaje WM_GETTEXT, es posible recuperar el texto de una ventana como una cadena de texto. - Asignación del Titulo de la Ventana: Consiste en almacenar el título de la ventana activa, para que posteriormente pueda ser convertido a voz. La asignación puede llevarse a cabo por tres razones: 1. La ventana activa tiene título. El texto recuperado en el proceso anterior es almacenado para posteriormente alimentar el proceso de conversión a voz. 2. La ventana activa es “Program Manager” (título asignado por el sistema operativo al escritorio). El texto almacenado será “Escritorio de Windows”. 3. La ventana activa no tiene título. Se asigna y se almacena como título el nombre de la clase de la ventana recuperado anteriormente. A partir de la detección de la clase de ventana es posible realizar cualquiera de los tres procesos siguientes: 1. Scripts: Los scripts serán archivos de texto que contendrán información de apoyo sobre las aplicaciones: Microsoft Word 2000, Micorosft Excel 2000, WinZip, y Winamp. La información consiste en una breve descripción de la aplicación, menús que contiene, teclas rápidas, y cómo utilizar el lector de pantalla con dichas aplicaciones. La información se cargará en un cuadro de edición desde el cual podrá ser vocalizada e inspeccionada con mayor detenimiento. 56 Los scripts serán activados por una combinación de teclas. Al realizar dicha combinación, se utilizará la clase de la ventana activa para buscar el script correspondiente a las aplicaciones antes mencionadas. 2. Lectura de Aplicaciones: En este proceso se inicia la captura del texto que manejan las aplicaciones Microsoft Word 2000, y Microsoft Excel 2000. El proceso representa un ejemplo de interacción con aplicaciones que utilizan objetos cuyas características y comportamiento están definidos por sus propias aplicaciones. • Monitoreo de Mensajes El sistema operativo y las aplicaciones se comunican por medio de mensajes. Interceptando estos mensajes es posible detectar cambios en los objetos que poseen el enfoque. El monitoreo de mensajes de esta etapa se realiza a nivel de todas las aplicaciones que corren bajo el sistema operativo, a excepción de la aplicación “Lector de Pantalla”. Esto se llevará a cabo a través de la instalación de un hook a nivel de sistema. La función SetCWPMSGHook ubicada en una librería de enlace dinámico que no pertenece a Windows, permite instalar un Hook Global (hook a nivel de sistema) para monitorear los mensajes que llegan a todas las aplicaciones, excluyendo aquélla desde la cual se invoca a la función. Posterior al monitoreo de mensajes se ejecutan los siguientes procesos: - Reconocimiento del Mensaje: Cuando la función SetCWPMSGHook recupera un mensaje, devuelve cuatro valores: un controlador a la ventana a la que se dirigía el mensaje, un identificador de mensaje, y dos parámetros que contienen información adicional sobre dicho mensaje. Los mensajes se distinguen por su 57 identificador, el cual es un valor constante predefinido por el sistema operativo. De esta forma el reconocimiento se lleva a cabo comparando los identificadores recibidos con los valores de sus respectivas constantes. - Teclas Presionadas: Por medio del mensaje WM_KEYDOWN, reconocido anteriormente, se reconocen las teclas que han sido presionadas y se lleva a cabo una comparación de los códigos de teclas recuperados para asociarlos con una cadena de texto que identifique cada una de dichas teclas. Posteriormente dicha cadena formará parte de la información que será transmitida al usuario. - Texto Contenido en el Objeto A través del reconocimiento de mensajes que afectan a objetos específicos, se activan rutinas para recuperar el texto contenido en los mismos. También se recupera el texto de los objetos cuando un nuevo objeto captura el enfoque. En ambos casos se utiliza la función SendMessage (con los parámetros apropiados para cada objeto) para recuperarlo. Posteriormente el texto formará parte de la información que será transmitida al usuario. • Controlador del Objeto con Enfoque Para poder capturar la información perteneciente a un objeto es necesario recuperar el controlador del objeto. Éste se obtiene por medio de la función GetFocus. A partir de este proceso se desencadenan los siguientes: - Clase del Objeto: Así como todas las ventanas del sistema operativo pertenecen a una clase, los objetos o controles también son parte de una clase específica. Este proceso es el encargado de capturar la clase del objeto que posee el enfoque, tarea que realiza mediante la función GetClassName, y puede alimentar directamente diferentes procesos (Estilo del Objeto, Tipo del Objeto, 58 y Texto Contenido en el Objeto) dependiendo de la clase a la que el objeto pertenezca. - Estilo del Objeto: A partir de los datos recuperados anteriormente (controlador y clase del objeto), se recupera el estilo del objeto que tiene el foco para todos aquellos controles pertenecientes a la clase “Button”. Esta tarea se lleva a cabo por medio de la función GetWindowLong, la cual retorna un valor numérico que contiene banderas que especifican el estilo de este tipo de controles. Mediante estas banderas se obtiene el tipo de botón. Entre los estilos que pueden ser recuperados se encuentran: Botón de Comando, Botón de Chequeo, y Botón de Opción. - Tipo del Objeto: Este proceso puede ser alimentado por varios procesos anteriores, dependiendo de la forma en que haya sido obtenido el objeto que tiene el enfoque, es decir, por medio del reconocimiento de mensajes, o por la obtención de la clase o estilo del objeto. El tipo de objeto es asignado dependiendo de los valores obtenidos en dichos procesos. - Estado del Objeto: Dependiendo del tipo de objeto asignado en el proceso anterior, se puede determinar el estado de algunas clases de objetos, entre ellos los controles de tipo botón y los ítems de menú pertenecientes a barras de menú estándares o menús contextuales (los que se activan al hacer clic con el botón derecho del ratón, o mediante la tecla de menú). - Descripción de Objetos: La descripción de objetos constituye una característica extra que se añadirá al prototipo a desarrollar, y trabajará en base al tipo o clase del objeto. La descripción será activada a través de una combinación de teclas. Al 59 presionar dicha combinación, el programa vocalizará una pequeña descripción del tipo de objeto que contienen el enfoque en ese momento. Todos los procesos anteriores tienen el objetivo de detectar o activar información que será transmitida en forma oral a través de los altavoces de la computadora. Esta tarea es representada en el diagrama de la figura 5.1, a través de los siguientes procesos: • Texto Este proceso se incluye en la estructura del prototipo a desarrollar, con el objetivo de indicar que antes de dar salida a la información, ésta debe poseer el formato de cadena de texto. El proceso consiste en transformar la información detectada a una cadena de texto en caso de que dicha información, no corresponda originalmente a este tipo de datos. • Sintetizador de Voz Mediante el componente Direct Text to Speech proporcionado por Visual Basic, y el empleo del motor L&HTTS3000, la información detectada en formato de cadena de texto, es reproducida por una voz digital en español y transmitida al usuario por medio de las bocinas de la computadora. El motor L&HTTS3000 provee la vocalización del texto en español, y posee dos modos de operación: vocalización con voz femenina, y vocalización con voz masculina. 60 Funciones que realizará Figura 5.2 Funciones que realizará el Lector de Pantalla 61 El diagrama anterior muestra las diferentes funciones que será capaz de realizar el programa lector de pantalla a desarrollar. Éstas se han definido de acuerdo a las funciones que debe poseer un lector de pantalla básico y a los alcances planteados. • Detección de la Ventana Activa Cuando el usuario abra una nueva ventana, o se traslade de una ventana a otra, leerá el título de la ventana activa, permitiendo conocer la aplicación sobre la que se encuentra actualmente. • Detección de Objetos Estándar Dentro de la ventana activa, algún control en particular adquiere el enfoque para que el usuario pueda interactuar con la aplicación. El lector de pantalla reconocerá una gran parte de los objetos estándar del sistema operativo (controles predefinidos y controles comunes), detectando información que depende del tipo de objeto en particular. Los controles detectados son los siguientes: - Botones Reconoce los siguientes tipos de botones presentes en distintas aplicaciones del sistema operativo: 1. Botón de Comando: Leerá su etiqueta, el tipo de botón, y su estado cu