Ayuda necesito que el pc lea

Iniciado por rigorvzla, 20 Noviembre 2017, 00:43 AM

0 Miembros y 2 Visitantes están viendo este tema.

rigorvzla

buenas amigos les traigo lo siguiente , hago un programa simple donde lo que quiero es que  cuando yo sombree algo con el raton y diga "leer" el programa lo haga sin mas nada. aqui esta mi intento fallido si alguien me sabe seria de gran ayuda.

case "leer":
                    /   TextReader leer_eso;
                        leer_eso = new TextReader.Read();
                        speakOut(leer_eso.ReadLine());
                       break;

okik

#1
Cita de: rigorvzla en 20 Noviembre 2017, 00:43 AM
buenas amigos les traigo lo siguiente , hago un programa simple donde lo que quiero es que  cuando yo sombree algo con el raton y diga "leer" el programa lo haga sin mas nada. aqui esta mi intento fallido si alguien me sabe seria de gran ayuda.

case "leer":
                   /   TextReader leer_eso;
                       leer_eso = new TextReader.Read();
                       speakOut(leer_eso.ReadLine());
                      break;

Cuando dices "leer" ¿te refieres a copiar al portapapeles?

De cualquier aplicación o de la misma


rigorvzla

me refiero a que el computador "lea literalemnte" con el speechrecognizion
selecciono un texto le ordeno leer y el , lee el objeto y lo habla por las cornetas, lo que no se es el comando para que pueda leer el texto seleccionado

Serapis

#4
Típicamente tienen un método "Speak", incluso "Play".

Objeto.Speak("este mensaje")

Selecciona el objeto que utilizas, y luego pulsa F1, para que te lleve a la ayuda y puedas consultar los métodos que expone el objeto... Si no tienes instalada la ayuda (local), te llevará a la página de internet donde se aloja, precisas pués tener conexión en el equipo donde lo vayas a probar.

Eleкtro

#5
Cita de: rigorvzla en 20 Noviembre 2017, 11:52 AM
me refiero a que el computador "lea literalemnte" con el speechrecognizion
selecciono un texto le ordeno leer y el , lee el objeto y lo habla por las cornetas, lo que no se es el comando para que pueda leer el texto seleccionado

Es decir, eso que no sabes hacer, te refieres a que al seleccionar con el ratón una cadena de texto DE CUALQUIER APLICACIÓN / VENTANA ABIERTA, ¿quieres saber como capturar ese texto desde tu programa? (para luego "leerlo").

Cita de: okik en 20 Noviembre 2017, 01:19 AMCuando dices "leer" ¿te refieres a copiar al portapapeles?

De cualquier aplicación o de la misma

Deberías responder a la pregunta del compañero @Okik para aclarar mejor lo que pretendes hacer, por que no es tan simple si estamos hablando de la instancia de tu propio programa, o de capturar el texto de una ventana externa...

...para esto último se me ocurren al menos 3 alternativas, cada una con sus ventajas y desventajas:

1. API de Windows (funciones de ventana y procesado de mensajes de ventana)
    - Requiere la implementación, el uso y el control de errores de código no administrado.
    - El desarrollo de un algoritmo exitoso podría convertirse en una auténtica pesadilla y llevar mucho tiempo de desarollo con fases de ensayo y error, ya que por necesidad se requiere la implementación de diferentes metodologías para ubicar ventanas en diferentes tipos de ventanas (vease por ejemplo: ChildWindowFromPoint y RealChildWindowFromPoint). Todo depende de lo que realmente necesite hacer tu algoritmo, cómo mínimo vas a tener que deliverar el mensaje de ventana WM_GETTEXT a la ventana del control activo de la ventana principal activa (la cual puedes obtener con la función GetForegroundWindow).
    - Ejecución rápida.

2. Microsoft UI Automation
    - Solución guiada y facil mediante código administrado que simplifica la tediosa implementación equivalente con la API de Windows y le abstrae de cierta dificultad.
    - Solo aplicable a programas que soporten la API de UI Automation ( UIA TextPattern ).
    - Ejecución lenta (muy lenta en comparación con unas simples llamadas a las funciones de la API de Windows).
   
3. Captura del portapapeles de Windows
    - Requiere el uso inevitable y la "escucha" de la combinación de teclas "CTRL+C".
    - Solución intrusiva para el usuario, ya que se reemplazaría el contenido del portapapeles. Por otro lado, se puede llevar a cabo una copia del contenido para restaurarla despues.
    - No funcionaría en todo tipo de ventanas, sobre todo en controles que tengan bloqueado el copiado de texto mediante "CTRL+C".

Luego me dejo la alternativa más avanzada pero que probablemente sería la más eficiente a efectos prácicos: el API Hooking, pero no me hago una idea del todo clara de como se podría implementar a cabo para el objetivo de esta tarea en particular.

Como ves tienes varias opciones, pero desde luego esto no sería cuestion de que te digan "un comando para hacerlo", por favor dejemos de pensar en "comandos" y de pedir "comandos", aquí no hay tales "comandos". La programación requiere de un estudio con un mínimo de conocimiento y/o investigación previa, y del esfuerzo personal/individual para el desarrollo de algoritmos así...

Saludos.








rigorvzla

¿quieres saber como capturar ese texto desde tu programa? (para luego "leerlo").
   
3. Captura del portapapeles de Windows
    - Requiere el uso inevitable y la "escucha" de la combinación de teclas "CTRL+C".
    - Solución intrusiva para el usuario, ya que se reemplazaría el contenido del portapapeles. Por otro lado, se puede llevar a cabo una copia del contenido para restaurarla despues.
    - No funcionaría en todo tipo de ventanas, sobre todo en controles que tengan bloqueado el copiado de texto mediante "CTRL+C".

AMIGO!!!  has dado en el clavo de mi pregunta, y tambien con la solucion (una parte de ella) esa opcion de copiar el texto para colocarlo en portapapeles me gusta hasta ahi vamos bien mas no se como hacer que lea el portapapeles luego de tner los datos, me darias un ejemplo aplicable a c# , estas en lo correcto ;-)

Eleкtro

#7
Cita de: rigorvzla en 20 Noviembre 2017, 18:14 PMno se como hacer que lea el portapapeles luego de tner los datos, me darias un ejemplo aplicable a c#

Te daré algo mejor, la documentación oficial (para WindowsForms):
( ahí tienes un ejemplo en C#. )

...Supongo que además querrás implementar un monitor de actividad del portapapeles. Aquí tienes toda la información necesaria, deberías leerla ( también para prevenirte de utilizar la metodología obsoleta con la función SetClipboardViewer )

Ejemplo en C#:

Saludos.








rigorvzla

bueno eso no me ayudo mucho mi ingles no es nada bueno y teniendo en cuenta que soy nuevo en esto tampoco es de mucha ayuda, simplemente me gustaria saber una forma de como , luego de tener en el clipboard un texto, el speech recognizer lo lea, mas nada.

tincopasan

Bueno, entonces tienes un gran problema!. Veamos, en lo personal Eleкtro es quien mas explica sobre net (aunque a veces cree que entendemos los códigos que para el deben ser simples), por lo tanto hay que prestar atención a la info que brinda en net.
Sino sabes  lo mínimo de ingles(en lo personal lo odio), estarás muy limitado en  el aprendizaje. Muchas veces no hay nada tan simple como para en una línea hacer lo que uno quiere. Ser nuevo no debe ser una excusa, todos estamos aprendiendo y no siempre es soplar y hacer botellas.
Saludos.