none
Aplicar accion a Ventana Activa RRS feed

  • Pregunta

  • Buenas amigos hoy les traigo una inquietud, hice una aplicacion que preciona las teclas del teclado, por medio de la voz, esto funciona perfectamente, el problema empieza, cuando quiero que la aplicacion haga la accion (presionar la tecla) en un programa de pantalla completa (juego), donde no hace nada, es como si no sirviera, mas si funciona si lo coloco en algun bloc de notas o programa que no tome la pantalla completa,funciona perfectamente.

    alguna idea de que debo hacer?? para poder capturar la pantalla activa en el momento

    lunes, 11 de junio de 2018 2:15

Todas las respuestas

  • ¿Cómo está programado su programa actualmente?  ¿Cómo determina usted la ventana activa actualmente?

    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    lunes, 11 de junio de 2018 5:52
    Moderador
  • trabajo con wpf , c# exactamente, y el programa conciste en yo hablarle , ejemplo, le digo " presiona h" y el programa lo hace , funciona en word, bloc de notas, pero en un programa que tenga pantalla completa no, y es aqui donde quiero que el programa funcione
    lunes, 11 de junio de 2018 12:17
  • Ok, pero mi pregunta sigue necesitando respuesta.  ¿Como determina la ventana activa?  Muestre el algoritmo que utiliza para ubicar la ventana que recibirá la entrada de teclado.

    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    lunes, 11 de junio de 2018 17:46
    Moderador
  • hola

    >>el programa lo hace , funciona en word, bloc de notas, pero en un programa que tenga pantalla completa no, y es aqui donde quiero que el programa funcione

    pero estas seguro que le problema es la ventana completa, o es la ventana activa?

    usas la api de windows para determinar la aplicacion activa donde quieres realizar la accion ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 11 de junio de 2018 19:07
  • no uso tal api, la desconozco, si es cuando la aplicacion es en pantalla completa, por que cuando es una ventana por ejemplo de word , bloc de notas, incluso en el buscador de canciones del winamp, digo la letra y la presiona, pero cuando la aplicacion es en ventana completa, no fuciona.
    • Editado RigorVzla martes, 12 de junio de 2018 1:27
    martes, 12 de junio de 2018 1:25
  • no determino tal cosa, por que desconocia que debia hacerlo, incluso no lo vi necesario ya que mis pruebas eran en ventanas y funcionaban no en patalla completa, que fue donde vi el problema y no se que hacer al respecto
    martes, 12 de junio de 2018 1:26
  • Ok, entonces muestre el código que utiliza para simular la presión de teclado.

    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    martes, 12 de junio de 2018 1:35
    Moderador
  • este es la forma que uso

    InputSimulator simuladorTeclas = new InputSimulator();
     SpeechRecognitionEngine escuchaJuego = new SpeechRecognitionEngine();
    
    string letraA;
    
     private void EscuchaJuego_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
            {
                speech = e.Result.Text;
                
                    if (speech == letraA)
                    {
                        simuladorTeclas.Keyboard.KeyPress(VirtualKeyCode.VK_A);
                    }

    basicamente es eso , yo hablo y preciona la letra y listo mas nada , pero en aplicaciones de pantalla completa no hace nada

    martes, 12 de junio de 2018 2:09
  • Ok, habría que estudiar cómo funciona ese objeto que tiene usted en la variable simuladorTeclas.  ¿Tiene documentación al respecto?  Imagino que lo que hace es ubicar la ventana activa y enviar mensajes de Windows.  El detalle con los juegos es que muchas veces usan DirectInput.  Es probable que ese simulador de teclas no funciona con aplicaciones DirectInput.

    Hay aplicaciones que muestran pantalla completa que no son juegos, como VLC.  Pruebe su código con una de estas aplicaciones.


    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    martes, 12 de junio de 2018 2:14
    Moderador
  • no tengo el VLC pero si el mediaplayer clasic y funciona cuando lo coloco en pantalla completa, buscare informacion del DirectInput
    martes, 12 de junio de 2018 2:48
  • encontre esto que funciona pero el codigo no esta en wpf asi q me eh trancado aqui, a ver si podran verlo .

    void Button1Click(object sender, EventArgs e)
    		{
    			Process p = (Process) listBox1.SelectedItem;			   
    		 	if( p != null)
    				{
        			IntPtr h = p.MainWindowHandle;
        			SetForegroundWindow(h);
        			SendKeys.SendWait(textBox1.Text);
    				}		
    		
    		}

    este codigo sirve en el proyecto que me pasaron como vb, pero en wpf esta linea

    me da un error que dice "No se puede convertir un objeto de tipo string al tipo diagnostic.process" alguna idea de como es el planteamiento aqui?

    Process p = (Process) listBox1.SelectedItem;

    martes, 12 de junio de 2018 16:10
  • Es que en Windows Forms llenaron un ListBox con objetos tipo Process.  Lo que necesita hacer es tener su propia forma de seleccionar el proceso deseado en su aplicación WPF y sacar de allí el objeto Process que desea.

    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    martes, 12 de junio de 2018 17:15
    Moderador
  • me podrias ayudar con el codigo que no tengo la mas remota idea , porfavor es lo unico q falta y ni idea como hacer lo que me dices
    miércoles, 13 de junio de 2018 0:17