Logo Desarrollo


Utilizar las voces de NVDA:

En la publicación anterior hemos visto como programar mensajes utilizando Microsoft Sapi.
Sin embargo también es posible hacerlo interactuando con NVDA. Para ello vamos a utilizar una función que llama a una DLL. 2 conceptos que aún no hemos explorado, pero que podemos manejar siguiendo los pasos a continuación.
Lo primero que necesitamos son los archivos dll a los cuales llamará la función que utilizaremos.

Descargar los archivos


Las funciones son uno de los elementos mas importantes de la programación, y un poco complejo de explicar en pocas líneas. Por lo que en esta ocasión solo vamos a hacer uso de ella, y más adelante intentaremos explicarlas, y trabajarlas más en profundidad.
En algún lugar del script, debemos copiar el siguiente código:


Nvda(text)
{
return DllCall("nvdaControllerClient" A_PtrSize*8 ".dll\nvdaController_speakText", "wstr", text)
}


La primer línea tiene el nombre de la función, la cual es "Nvda", sin comillas.
Entre paréntesis el parámetro que vamos a pasarle a esta función, que en este caso será texto.
Luego entre signos de llave, está la llamada a la DLL que hemos descargado.
En esta línea es importante colocar correctamente la ruta del controlador dll. De la forma en que está creada la función, nuestros nvdaKontrollerClient deben estar en la raíz de la carpeta que contendrá el script.
Si en lugar de eso, queremos crear un subdirectorio donde copiar estos archivos,
es necesario agregar la ruta. Por ejemplo;
supongamos que en la carpeta principal donde se encontrará el ejecutable del script, creamos una carpeta llamada "Archivos", y que ahí dentro tendremos los archivos DLL. La línea quedaría así:


return DllCall("Archivos\nvdaControllerClient" A_PtrSize*8 ".dll\nvdaController_speakText", "wstr", text)


Una vez copiada la función en nuestro script, y guardado los archivos DLL en su sitio, solo nos queda llamar a la función, con el parámetro texto. Lo haremos de la siguiente forma:


f4::
Nvda("Hola mundo. ah, no, tendría que aprender otra frase. Siempre digo lo mismo...")
Return


Lo que hemos hecho en la segunda línea, es colocar el nombre de la función. En este caso, "Nvda".
Las funciones requieren que los parámetros estén entre signos de paréntesis. Y como lo que vamos a indicar es texto, también debe ir entre comillas.
Para que el NVDA lea el contenido del portapapeles, si es que hay algún texto en él, colocamos la variable Clipboard, de esta forma:


Nvda(Clipboard)


Como aclaraba en los primeros artículos de esta sección, es importante el seleccionar la distribución de 32 bits durante el proceso de instalación del AutoHotkey. Esto puede evitarnos varios dolores de cabeza con respecto a la compatibilidad, así como al uso de los controladores de NVDA. en el caso de que la ruta de la llamada al controlador sea la correcta, y aún no funcione. Pueden probar colocando el número 32 al nombre del archivo dll. Quedaría así:


return DllCall("nvdaControllerClient32" A_PtrSize*8 ".dll\nvdaController_speakText", "wstr", text)

Dejo el link del proyecto en GitHub, y el script de ejemplo:

Ver el proyecto en GitHub Descargar el archivo