none
Accionar una tecla por código RRS feed

  • Pregunta

  • Como puedo accionar una tecla por código ? Lo que necesito es que cuando el usuario accione la tecla key.Down, el sistema ejecute la tecla F2
    Intenté con SendKeys, pero no funciona en WPF..... El código es el siguiente:-

    void PreviewKeyDown(object sender, KeyEventArgs e)
            {
                switch (e.Key)
                {
                   case Key.Down:
                         
                        SendKeys.Send("{F2}");

                    default:
                        break;
                }

            }

    Que tengo que usar en lugar de SendKeys ?
    Gracias,
    José Laks
    viernes, 18 de diciembre de 2009 13:25

Todas las respuestas

  • Hola en WPF es totalmente diferente

     if (e.Key == Key.Down)
           
    {
                e
    .Handled = true;
               
    KeyEventArgs eInsertBack = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.F2);
                eInsertBack
    .RoutedEvent = UIElement.KeyDownEvent;
               
    InputManager.Current.ProcessInput(eInsertBack);
           
    }

    Saludos

    Oscar Avarez Guerras - Arquitecto Software en I3B (I+D+I) Blog:http://geeks.ms/blogs/oalvarez Por favor marca como respuesta si te ha ayudado esta respuesta
    viernes, 18 de diciembre de 2009 14:04
  • Gracias Oscar !
    viernes, 18 de diciembre de 2009 14:41
  • Como puedo hacer para accionar dos teclas seguidas. O sea, F2 y luego la tecla que el usuario haya tipeado.
    El código que tengo hasta ahora es el siguiente:

    void PreviewKeyDown(object sender, KeyEventArgs e)
            {
                switch (e.Key)
                {
                   case Key.Down:
      break;
                     default:
             e.Handled = true;
               KeyEventArgs eInsertBack = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.F2);
                 eInsertBack.RoutedEvent = UIElement.KeyDownEvent;
               InputManager.Current.ProcessInput(eInsertBack);
                     break;
                }
            }

    Con esté código, ante cualquier tecla que tipee el usuario (salvo Key.Down) se accionará automáticamente la tecla F2.
    Lo que necesito, es que además se accione la tecla que el usuario haya tipeado (o sea e.Key )
    Lo intenté asi:

    void PreviewKeyDown(object sender, KeyEventArgs e)
            {
                switch (e.Key)
                {
                   case Key.Down:
      break;
                     default:
             e.Handled = true;

    // Primero tipeo F2
               KeyEventArgs eInsertBack = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.F2);
                 eInsertBack.RoutedEvent = UIElement.KeyDownEvent;
               InputManager.Current.ProcessInput(eInsertBack);

      // Luego intento tipear la tecla que el usuario haya tipeado.     
               KeyEventArgs eInsertBack1 = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, e.Key);
                 eInsertBack1.RoutedEvent = UIElement.KeyDownEvent;
               InputManager.Current.ProcessInput(eInsertBack1);

                      break;
                }
            }

    pero no funcionó. 
    Alguien me podría decir porqué?
    Gracias.
    viernes, 18 de diciembre de 2009 18:57