Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Windows Forms nabízí několik možností pro programovou simulaci vstupu klávesnice. Tento článek obsahuje přehled těchto možností.
Použijte SendKeys
Windows Forms poskytuje System.Windows.Forms.SendKeys třídu pro odesílání stisknutí kláves do aktivní aplikace. Existují dvě metody odesílání stisknutí kláves do aplikace: SendKeys.Send a SendKeys.SendWait. Rozdíl mezi těmito dvěma metodami spočívá v tom, že SendWait
blokuje aktuální vlákno při odeslání stisknutí klávesy, čekání na odpověď, zatímco Send
ne. Další informace o SendWait
naleznete v tématu Odeslání stisknutí kláves do jiné aplikace.
Upozornění
Pokud je vaše aplikace určená pro mezinárodní použití s různými klávesnicemi, může použití SendKeys.Send přinést nepředvídatelné výsledky a mělo by se jim vyhnout.
Na pozadí SendKeys
používá pro odesílání vstupu starší implementaci Windows, která může selhat ve Windows, kde se očekává, že aplikace není spuštěná s právy správce. Pokud starší implementace selže, kód se automaticky pokusí novější implementaci Systému Windows pro odesílání vstupu. Kromě toho, když SendKeys třída používá novou implementaci, SendWait metoda již nezablokuje aktuální vlákno při odesílání stisknutí kláves do jiné aplikace.
Důležité
Pokud vaše aplikace spoléhá na konzistentní chování bez ohledu na operační systém, můžete vynutit, aby třída SendKeys používala novou implementaci přidáním následujícího nastavení aplikace do app.config souboru.
<appSettings>
<add key="SendKeys" value="SendInput"/>
</appSettings>
Chcete-li vynutit, aby třída SendKeyspouze použít předchozí implementaci, použijte místo toho hodnotu "JournalHook"
.
Odeslání stisknutí klávesy do stejné aplikace
Volejte metodu SendKeys.Send nebo SendKeys.SendWait třídy SendKeys. Zadané stisknutí kláves se přijímají aktivní kontrolou aplikace.
Následující příklad kódu používá Send
k simulaci stisknutí kláves Alt a Šipka dolů dohromady. Tyto stisknutí kláves způsobují, že ovládací prvek ComboBox zobrazí rozevírací seznam. Tento příklad předpokládá Form s Button a 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
Odeslání stisknutí klávesy do jiné aplikace
Metody SendKeys.Send a SendKeys.SendWait odesílají stisknutí kláves do aktivní aplikace, což je obvykle aplikace, ze které posíláte stisknutí kláves. Pokud chcete posílat stisknutí kláves do jiné aplikace, musíte ho nejdřív aktivovat. Vzhledem k tomu, že neexistuje žádná spravovaná metoda pro aktivaci jiné aplikace, musíte k zaměření druhé aplikace použít nativní metody Systému Windows. Následující příklad kódu používá volání platformy k zavolání metod FindWindow
a SetForegroundWindow
pro aktivaci okna aplikace Kalkulačka a poté zavolá Send
k provedení řady výpočtů v aplikaci Kalkulačka.
Následující příklad kódu používá Send
k simulaci stisknutí kláves do aplikace Windows Calculator. Nejprve vyhledá okno aplikace s názvem Calculator
a pak ho aktivuje. Jakmile je to aktivováno, stisknuté klávesy jsou odeslány k výpočtu 10 plus 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
Použití metod OnEventName
Nejjednodušší způsob, jak simulovat události klávesnice, je volat metodu objektu, který vyvolá událost. Většina událostí má odpovídající metodu, která je vyvolá, pojmenovanou podle vzoru On
následovaného EventName
, jako například OnKeyPress
. Tato možnost je možná jenom v rámci vlastních ovládacích prvků nebo formulářů, protože tyto metody jsou chráněné a nelze k němu přistupovat mimo kontext ovládacího prvku nebo formuláře.
Tyto chráněné metody jsou k dispozici pro simulaci událostí klávesnice.
OnKeyDown
OnKeyPress
OnKeyUp
Další informace o těchto událostech najdete v tématu Použití událostí klávesnice.
Viz také
.NET Desktop feedback