Hice un teclado en pantalla con C# Windows Forms. Uso la función Sendkeys.Send()
para enviar las teclas. Todas las letras menos la letra i funciona bien. Cuando presiono la letra i en el teclado cuando Microsoft Word es abierta, envía Ctrl +Alt +I y abre el diálogo de impresión. Es lo mismo en Notepad ++ también. Pero funciona bien cuando trato de escribir en el bloc de notas.Envío de la letra 'i' con SendKeys
En mi código, envío las claves con SendKeys.Send(value);
donde el valor es el texto del botón que se presiona. Obtengo el texto con el siguiente código:
string s = ((Button)sender).Text;
¿Algún comentario sobre por qué no funciona correctamente?
Editar: He creado un nuevo proyecto de formularios de Windows con solo un botón y todo el código está debajo. Sigue sin funcionar. Cualquier idea sera apreciada.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SendKeys.Send("i");
}
// Prevent form being focused
const int WS_EX_NOACTIVATE = 0x8000000;
protected override CreateParams CreateParams
{
get
{
CreateParams ret = base.CreateParams;
ret.ExStyle |= WS_EX_NOACTIVATE;
return ret;
}
}
}
La función anulada es evitar que se enfoque el formulario. Para poder enviar las teclas a la otra aplicación que tiene el foco.
¿Es definitivamente en esta parte del código? ¿Qué es 'value', esto no es una palabra clave? Es posible que, en cierta circunstancia, descubra eso en lugar de utilizar el objeto '((MiClase))' que utiliza '(objeto como MiClase)'. El segundo devolverá null si obj no es un MyClass, en lugar de arrojar una excepción de lanzamiento de clase. – MoonKnight
Lo siento mucho. Sería cadena s en lugar de valor s. El resultado no cambia, incluso lo hago así: Sendkeys.Send ("i"); –
¿Utilizaste un depurador para verificar qué valor está obteniendo 's'? Esto te ayudará a reducir el problema. –