亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何在 UWP 中使用代碼模擬 Tab 鍵按下

如何在 UWP 中使用代碼模擬 Tab 鍵按下

C#
萬千封印 2023-04-16 10:06:48
我正在嘗試使用屏幕上的按鈕來執行 Tab 和 reverse Tab 的功能。我希望該應用程序使用這些其他按鈕在“細分”按鈕之間切換,然后用戶能夠使用 Enter 鍵選擇一個。試圖使程序完全可通過鍵盤導航。我曾嘗試使用 KeyDown 事件,然后使用定向焦點導航,但我更希望讓系統模擬 Tab 鍵按下以跟隨 Tab 路徑。這是我一直在嘗試解決的代碼,但它并不是我想要的功能。        private void Grid_KeyDown(object sender, KeyRoutedEventArgs e)        {            DependencyObject candidate = null;            var options = new FindNextElementOptions()            {                SearchRoot = WeldPGrid,                XYFocusNavigationStrategyOverride = XYFocusNavigationStrategyOverride.Projection            };            switch (e.Key)            {                case Windows.System.VirtualKey.Up:                    candidate =                        FocusManager.FindNextElement(                            FocusNavigationDirection.Up, options);                    break;                case Windows.System.VirtualKey.Down:                    candidate =                        FocusManager.FindNextElement(                            FocusNavigationDirection.Down, options);                    break;                case Windows.System.VirtualKey.Left:                    candidate = FocusManager.FindNextElement(                        FocusNavigationDirection.Left, options);                    break;                case Windows.System.VirtualKey.Right:                    candidate =                        FocusManager.FindNextElement(                            FocusNavigationDirection.Right, options);                    break;            }            // Also consider whether candidate is a Hyperlink, WebView, or TextBlock.            if (candidate != null && candidate is Control)            {                (candidate as Control).Focus(FocusState.Keyboard);            }        }作為最終結果,我希望將模擬的 Tab 按下放在側面按鈕的單擊事件或命令中,而不僅僅是使用方向鍵。對此問題的任何幫助將不勝感激!
查看完整描述

2 回答

?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

但看起來這個庫可能有一種新方法,我只需要弄清楚如何使用它


在我們使用輸入注入之前,我們必須在應用程序清單中聲明此功能,因為它是一個非標準功能。這是一項受限功能,這意味著您可以使用它安全地將您的應用程序發布到應用程序商店,但需要批準才能提交商店。


鍵盤輸入


該類InjectedInputKeyboardInfo將作為鍵盤輸入注入的基礎。最重要的屬性是 VirtualKey,它指定與哪個鍵相關的輸入。使用 KeyOptions 我們可以指定更多選項,例如模擬按鍵彈起事件。


private async void Button_Click(object sender, RoutedEventArgs e)

{

    InputInjector inputInjector = InputInjector.TryCreate();

    for (int i = 0; i < 10; i++)

    {

        var info = new InjectedInputKeyboardInfo();

        info.VirtualKey = (ushort)(VirtualKey.Tab);

        inputInjector.InjectKeyboardInput(new[] { info });

        await Task.Delay(1000);

    }        

}

更新


Shift+Tab


InputInjector inputInjector = InputInjector.TryCreate();

 for (int i = 0; i < 10; i++)

 {

     var shift = new InjectedInputKeyboardInfo();

     shift.VirtualKey = (ushort)(VirtualKey.Shift);

     shift.KeyOptions = InjectedInputKeyOptions.None;



     var tab = new InjectedInputKeyboardInfo();

     tab.VirtualKey = (ushort)(VirtualKey.Tab);

     tab.KeyOptions = InjectedInputKeyOptions.None;



     inputInjector.InjectKeyboardInput(new[] { shift,tab});


     await Task.Delay(1000);

 }

更新 1


對于釋放密鑰,我們需要將密鑰選項設置為KeyUp并再次調用InjectKeyboardInput。


InputInjector inputInjector = InputInjector.TryCreate();

 var ctrl = new InjectedInputKeyboardInfo();

 ctrl.VirtualKey = (ushort)(VirtualKey.Control);

 ctrl.KeyOptions = InjectedInputKeyOptions.KeyUp;


 inputInjector.InjectKeyboardInput(new[] { ctrl });


查看完整回答
反對 回復 2023-04-16
?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

您可以使用 WIN32 API,獲取應用程序的句柄并使用SendKeys.SendWait("{Tab}");


前任:


IntPtr handle = FindWindow(null, "YourApplicationName");

SetForegroundWindow(handle);

SendKeys.SendWait("{Tab}");

SendKeys.Flush();

如果您的 Tab 鍵順序設置正確,它將在您指定的控件中按 Tab 鍵切換多少次。雖然這模擬了實際輸入,所以如果您希望用戶在系統選項卡頂部提供輸入,它可能不太合適。


查看完整回答
反對 回復 2023-04-16
  • 2 回答
  • 0 關注
  • 207 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號