Ho creato una tastiera su schermo con C# Windows Forms. Io uso la funzione Sendkeys.Send()
per inviare le sequenze di tasti. Tutte le lettere tranne la lettera i funzionano bene. Quando premo la lettera di i sulla tastiera quando Microsoft Word è aperto, invia Ctrl +Alt +I e si apre la finestra di dialogo di stampa. È lo stesso anche in Notepad ++. Ma funziona bene quando provo a digitare il blocco note.Invio lettera 'i' con SendKeys
Nel mio codice invio le chiavi con SendKeys.Send(value);
dove valore è il testo del pulsante che viene premuto. Ricevo il testo con il seguente codice:
string s = ((Button)sender).Text;
Qualche commento sul motivo per cui non funziona correttamente?
Modifica: Ho creato un nuovo progetto di finestre con un solo pulsante e l'intero codice è sotto. Continua a non funzionare. Qualsiasi idea sarebbe apprezzata.
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 funzione di sostituzione è di impedire che il modulo sia focalizzato. In modo che io possa inviare le sequenze di tasti all'altra applicazione che ha il focus.
E 'sicuramente in questa parte del codice? Qual è il valore? Questa non è una parola chiave? In qualche circostanza si potrebbe trovare che piuttosto che lanciare con l'oggetto '((MyClass) 'che esegue il casting usando' (oggetto come MyClass) '. Il secondo restituirà null se obj non è una MyClass, piuttosto che lanciare un'eccezione cast di classe. – MoonKnight
Mi dispiace tanto. sarebbe stringa s invece di valore s.Il risultato non cambia anche io lo faccio in questo modo: Sendkeys.Send ("i"); –
Hai usato un debugger per verificare quale valore 's' sta ottenendo? Questo ti aiuterà a restringere il problema. –