Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Windows Form offre alcune opzioni per simulare l'input da tastiera a livello di codice. Questo articolo offre una panoramica di queste opzioni.
Usare SendKeys
Windows Form fornisce la classe System.Windows.Forms.SendKeys per l'invio di sequenze di tasti all'applicazione attiva. Esistono due metodi per inviare sequenze di tasti a un'applicazione: SendKeys.Send e SendKeys.SendWait. La differenza tra i due metodi consiste nel fatto che SendWait
blocca il thread corrente quando viene inviata la sequenza di tasti, in attesa di una risposta, mentre Send
non lo fa. Per altre informazioni su SendWait
, vedere . Per inviare una sequenza di tasti a un'applicazione diversa, consultare.
Attenzione
Se l'applicazione è destinata all'uso internazionale con varie tastiere, l'uso di SendKeys.Send potrebbe produrre risultati imprevedibili e deve essere evitato.
In background, SendKeys
usa un'implementazione di Windows precedente per l'invio di input, che potrebbe non riuscire in Windows, in cui è previsto che l'applicazione non sia in esecuzione con diritti amministrativi. Se l'implementazione precedente ha esito negativo, il codice prova automaticamente l'implementazione di Windows più recente per l'invio di input. Inoltre, quando la classe SendKeys usa la nuova implementazione, il metodo SendWait non blocca più il thread corrente quando si inviano sequenze di tasti a un'altra applicazione.
Importante
Se l'applicazione si basa su un comportamento coerente indipendentemente dal sistema operativo, è possibile forzare la classe SendKeys a usare la nuova implementazione aggiungendo l'impostazione dell'applicazione seguente al file app.config.
<appSettings>
<add key="SendKeys" value="SendInput"/>
</appSettings>
Per forzare la classe SendKeys a solo usare l'implementazione precedente, usare invece il valore "JournalHook"
.
Per inviare una sequenza di tasti alla stessa applicazione
Chiamare il metodo SendKeys.Send o SendKeys.SendWait della classe SendKeys. Le sequenze di tasti specificate vengono ricevute dal controllo attivo dell'applicazione.
Nell'esempio di codice seguente viene Send
usato per simulare la pressione dei tasti di direzione ALT e GIÙ insieme. Queste sequenze di tasti fanno apparire l'elenco a discesa del controllo ComboBox. In questo esempio si presuppone un Form con un Button e un ComboBox.
private void button1_Click(object sender, EventArgs e)
{
comboBox1.Focus();
SendKeys.Send("%+{DOWN}");
}
Private Sub Button1_Click(sender As Object, e As EventArgs)
ComboBox1.Focus()
SendKeys.Send("%+{DOWN}")
End Sub
Per inviare una sequenza di tasti a un'applicazione diversa
I metodi SendKeys.Send e SendKeys.SendWait inviano sequenze di tasti all'applicazione attiva, che in genere è l'applicazione da cui si inviano sequenze di tasti. Per inviare sequenze di tasti a un'altra applicazione, è prima necessario attivarla. Poiché non esiste alcun metodo gestito per attivare un'altra applicazione, è necessario usare i metodi nativi di Windows per concentrarsi sull'altra applicazione. L'esempio di codice seguente usa platform invoke per chiamare i metodi FindWindow
e SetForegroundWindow
per attivare la finestra dell'applicazione Calculator e quindi chiama Send
per inviare una serie di calcoli all'applicazione Calculator.
Nell'esempio di codice seguente viene Send
usato per simulare la pressione dei tasti nell'applicazione Calcolatrice di Windows. Cerca prima una finestra dell'applicazione con titolo di Calculator
e quindi la attiva. Dopo l'attivazione, le sequenze di tasti vengono inviate per calcolare 10 più 10.
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
private void button1_Click(object sender, EventArgs e)
{
IntPtr calcWindow = FindWindow(null, "Calculator");
if (SetForegroundWindow(calcWindow))
SendKeys.Send("10{+}10=");
}
<Runtime.InteropServices.DllImport("USER32.DLL", CharSet:=Runtime.InteropServices.CharSet.Unicode)>
Public Shared Function FindWindow(lpClassName As String, lpWindowName As String) As IntPtr : End Function
<Runtime.InteropServices.DllImport("USER32.DLL")>
Public Shared Function SetForegroundWindow(hWnd As IntPtr) As Boolean : End Function
Private Sub Button1_Click(sender As Object, e As EventArgs)
Dim hCalcWindow As IntPtr = FindWindow(Nothing, "Calculator")
If SetForegroundWindow(hCalcWindow) Then
SendKeys.Send("10{+}10=")
End If
End Sub
Utilizzare le funzioni OnEventName
Il modo più semplice per simulare gli eventi della tastiera consiste nel chiamare un metodo sull'oggetto che genera l'evento. La maggior parte degli eventi ha un metodo corrispondente che li richiama, denominato nel modello di On
seguito da EventName
, ad esempio OnKeyPress
. Questa opzione è possibile solo all'interno di controlli o moduli personalizzati, perché questi metodi sono protetti e non possono essere accessibili dall'esterno del contesto del controllo o del modulo.
Questi metodi protetti sono disponibili per simulare gli eventi della tastiera.
OnKeyDown
OnKeyPress
OnKeyUp
Per altre informazioni su questi eventi, vedere Uso degli eventi della tastiera.
Vedere anche
.NET Desktop feedback