Problema con PromptBuilder

Iniciado por rigorvzla, 3 Febrero 2018, 23:21 PM

0 Miembros y 1 Visitante están viendo este tema.

rigorvzla

Eh creado este codigo con la finalidad de poder copiar todo lo que hable en un cuadro de texto, pero quiero que se pueda hacer fuera del cuadro de texto.

Aqui el codigo que implemente
Código (csharp) [Seleccionar]
using System.Windows;
using System.Speech.Synthesis;
using System.Speech.Recognition;

namespace Test
{
    public partial class MainWindow : Window
    {       
        PromptBuilder dictado = new PromptBuilder();
        SpeechSynthesizer habla = new SpeechSynthesizer();
        SpeechRecognitionEngine escucha = new SpeechRecognitionEngine();
        string speech;
        public MainWindow()
        {
            InitializeComponent();
            ActivarEscucha();
        }

 
        private void ActivarEscucha()
        {
            escucha.SetInputToDefaultAudioDevice();
            escucha.LoadGrammar(new DictationGrammar());
            escucha.RecognizeAsync(RecognizeMode.Multiple);
            escucha.SpeechRecognized += Escucha_SpeechRecognized;
            habla.SpeakAsync("Esperando Dictado");
        }

        private void Escucha_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            speech = e.Result.Text;
    // dictado.AppendText(speech);       
        textbox.AppendText(speech); <-- si yo coloco esta linea, me escribe lo que hable en el textbox, yo necesito es que lo escriba fuera del textbox

        }
    }
}


Espero puedan ayudarme a solventar este problema , gracias.

Eleкtro

Cita de: rigorvzla en  3 Febrero 2018, 23:21 PM
Código (csharp) [Seleccionar]
textbox.AppendText(speech); <-- si yo coloco esta linea, me escribe lo que hable en el textbox, yo necesito es que lo escriba fuera del textbox

"yo necesito es que lo escriba fuera del textbox", intenta ser más específico, eso se puede interpretar de mil formas, aclara lo que estás intentando hacer: escribir en otro control de la UI, o donde?.

Saludos!








rigorvzla

la idea seria que al yo colocar el promt en cualquier lugar donde sea posible escribir, pueda dictar y que copie , sea ya en bloc de notas, en la barra de direccion del explorador web o un cuadro de consola.

Eleкtro

#3
Cita de: rigorvzla en  4 Febrero 2018, 02:32 AM
la idea seria que al yo colocar el promt en cualquier lugar donde sea posible escribir, pueda dictar y que copie , sea ya en bloc de notas, en la barra de direccion del explorador web o un cuadro de consola.

Bueno, eso no es algo de hacer tan simple como llamar a un método y listo, debes identificar la ventana activa que tiene el foco de entrada, o la ventana hija de tipo 'Edit Control' en la que desees escribir el texto. Para detectar la ventana activa y asignar un texto a dicha ventana puedes recurrir a las funciones de la API de Windows para la mensajería de ventanas (GetForegroundWindow, SendMessage + WM_GETTEXT / WM_SETTEXT), si necesitases identificar una ventana hija dentro de la ventana principal/padre activa, entonces necesitarías enumerar las ventanas (funciones EnumChildWindows / EnumThreadWindows), o puedes recurrir diréctamente a la tecnología de Microsoft UI Automation para analizar el árbol de ventanas.

Win32 o UI Automation, ambas metodologías tienen sus ventajas e inconvenientes respectivamente, UI Automation es más sofisticado y simplificado, pero tambien más lento, y solo es compatible con ciertas ventanas que soporten el modelo (yo te digo, que en general con UI Automation no deberías encontrar ningún problema al intentar analizar cualquier tipo de ventana), pero lo bueno es que sería una solución basada en código administrado y por ello la solución se vuelve más estable y sencilla de implementar; mientras que la API de Win32 es compatible con todo tipo de ventanas (Win32, WPF, Windows Forms...), pero es código no administrado y eso resultaría en un código resultante más tedioso, feo e inestable en comparación.

Puedes encontrar muchos ejemplos en Internet con respecto a como detectar la ventana activa en C#, ejemplos de como enumerar ventanas hijas con la API de Windows, o como usar UI Automation en general.

Un saludo








rigorvzla

Gracias elektro, partire de ahi entonces, creia que seria mas simple asi como lo mensionaste, asi como escribir en un txtbox pero al parecer es mas laborioso, investigare al respecto.