第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何以編程方式在C#中生成按鍵事件?

如何以編程方式在C#中生成按鍵事件?

達(dá)令說 2019-07-26 11:48:22
如何以編程方式在C#中生成按鍵事件?如何以編程方式創(chuàng)建一個模擬鍵盤上按鍵的事件?
查看完整描述

3 回答

?
BIG陽

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個贊

問題是標(biāo)記為WPF,但到目前為止的答案是特定的WinForms和Win32。

要在WPF中執(zhí)行此操作,只需構(gòu)造一個KeyEventArgs并在目標(biāo)上調(diào)用RaiseEvent。例如,要將Insert鍵KeyDown事件發(fā)送到當(dāng)前關(guān)注的元素:

  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 }
  );

此解決方案不依賴于本機(jī)調(diào)用或Windows內(nèi)部,并且應(yīng)該比其他解決方案更可靠。它還允許您模擬特定元素上的按鍵。

請注意,此代碼僅適用于PreviewKeyDown,KeyDown,PreviewKeyUp和KeyUp事件。如果你想發(fā)送TextInput事件,你會這樣做:

  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 }
  );

另請注意:

  • 控件期望接收預(yù)覽事件,例如,PreviewKeyDown應(yīng)該在KeyDown之前

  • 使用target.RaiseEvent(...)將事件直接發(fā)送到目標(biāo),而不進(jìn)行加速器,文本組合和IME等元處理。這通常是你想要的。另一方面,如果由于某種原因你真的要模擬實(shí)際的鍵盤鍵,你可以使用InputManager.ProcessInput()代替。



查看完整回答
反對 回復(fù) 2019-07-26
  • 3 回答
  • 0 關(guān)注
  • 613 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號