Klavyede basılmakta olan bir tuşa benzeyen bir olayı programlı olarak nasıl oluşturabilirim?
Klavyede basılmakta olan bir tuşa benzeyen bir olayı programlı olarak nasıl oluşturabilirim?
Yanıtlar:
Soru WPF olarak etiketlenmiştir, ancak şimdiye kadarki cevaplar belirli WinForms ve Win32'dir.
Bunu WPF'de yapmak için, bir KeyEventArgs oluşturun ve hedefte RaiseEvent'i çağırın. Örneğin, şu anda odaklanılan öğeye bir Anahtar Ekle KeyDown olayı göndermek için:
var key = Key.Insert; // Key to send
var target = Keyboard.FocusedElement; // Target element
var routedEvent = Keyboard.KeyDownEvent; // Event to send
target.RaiseEvent(
new KeyEventArgs(
Keyboard.PrimaryDevice,
PresentationSource.FromVisual(target),
0,
key)
{ RoutedEvent=routedEvent }
);
Bu çözüm yerel aramalara veya Windows dahili aramalarına dayanmaz ve diğerlerinden çok daha güvenilir olmalıdır. Ayrıca, belirli bir öğe üzerinde bir tuşa basmanın simülasyonunu da sağlar.
Bu kodun yalnızca PreviewKeyDown, KeyDown, PreviewKeyUp ve KeyUp olayları için geçerli olduğunu unutmayın. TextInput olayları göndermek istiyorsanız, bunun yerine şunu yapacaksınız:
var text = "Hello";
var target = Keyboard.FocusedElement;
var routedEvent = TextCompositionManager.TextInputEvent;
target.RaiseEvent(
new TextCompositionEventArgs(
InputManager.Current.PrimaryKeyboardDevice,
new TextComposition(InputManager.Current, target, text))
{ RoutedEvent = routedEvent }
);
Ayrıca şunları unutmayın:
Denetimler Önizleme olaylarını almayı bekler, örneğin PreviewKeyDown KeyDown'dan önce gelmelidir
Target.RaiseEvent (...) öğesinin kullanılması, olayı hızlandırıcılar, metin oluşturma ve IME gibi meta işleme olmadan doğrudan hedefe gönderir. Bu normalde istediğiniz şeydir. Öte yandan, herhangi bir nedenle gerçek klavye tuşlarını simüle etmek için gerçekten ne yaparsanız, bunun yerine InputManager.ProcessInput () kullanırsınız.
Keyboard.PrimaryDevice.ActiveSource
bkz stackoverflow.com/questions/10820990/...
Ctrl+C
.)
Windows Forms Context olmadan anahtar olaylar üretmek için aşağıdaki yöntemi kullanabiliriz,
[DllImport("user32.dll")]
public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
örnek kod aşağıda verilmiştir:
const int VK_UP = 0x26; //up key
const int VK_DOWN = 0x28; //down key
const int VK_LEFT = 0x25;
const int VK_RIGHT = 0x27;
const uint KEYEVENTF_KEYUP = 0x0002;
const uint KEYEVENTF_EXTENDEDKEY = 0x0001;
int press()
{
//Press the key
keybd_event((byte)VK_UP, 0, KEYEVENTF_EXTENDEDKEY | 0, 0);
return 0;
}
Sanal Anahtarların listesi burada tanımlanmıştır .
Resmin tamamını görmek için lütfen aşağıdaki bağlantıyı kullanın, http://tksinghal.blogspot.in/2011/04/how-to-press-and-hold-keyboard-key.html
Ben kullanmadım ama SendKeys istediğini yapabilir.
Etkin uygulamaya tuş vuruşlarını ve tuş vuruşu kombinasyonlarını göndermek için Gönder Tuşları'nı kullanın. Bu sınıf somutlaştırılamaz. Bir sınıfa bir tuş vuruşu göndermek ve programınızın akışına hemen devam etmek için Gönder'i kullanın. Tuş vuruşuyla başlatılan işlemleri beklemek için SendWait'i kullanın.
System.Windows.Forms.SendKeys.Send("A");
System.Windows.Forms.SendKeys.Send("{ENTER}");
Kolayca! (çünkü işi bizim için zaten başkası yaptı ...)
Önerilen cevaplarla bunu denemek için çok zaman harcadıktan sonra , bir tuşa basmayı simüle etmeyi olabildiğince basitleştiren bu kodepleks projesine rastladım Windows Giriş Simülatörü :
Paketi yükleyin, yapılabilir veya NuGet paket yöneticisinden veya aşağıdaki gibi paket yöneticisi konsolundan yapılabilir:
Kurulum Paketi Giriş Simülatörü
Bu 2 satırlık kodu kullanın:
inputSimulator = new InputSimulator()
inputSimulator.Keyboard.KeyDown(VirtualKeyCode.RETURN)
Ve bu kadar!
-------DÜZENLE--------
Codeplex'teki proje sayfası bazı nedenlerden dolayı işaretlenmiştir, bu NuGet galerisinin bağlantısıdır.
WM_KEYDOWN gönderimli Windows SendMessage API .