[英]How to Simulate a Tab Key Press with Code in UWP
我正在嘗試使用屏幕上的按鈕來執行 Tab 和反向 Tab 的功能。 我希望應用程序使用這些其他按鈕在 Segment 按鈕之間切換,然后用戶可以使用 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 按下放在側面按鈕的單擊事件或命令中,而不僅僅是使用方向鍵。 對這個問題的任何幫助將不勝感激!
但看起來這個庫可能有一種新的方式我只需要弄清楚如何使用它
在我們使用輸入注入之前,我們必須在應用程序清單中聲明此功能,因為它是非標准功能。 這是一項受限功能,這意味着您可以使用它安全地將您的應用發布到應用商店,但需要批准商店提交。
鍵盤輸入
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 });
您可以使用 WIN32 API,獲取應用程序的句柄並使用SendKeys.SendWait("{Tab}");
前任:
IntPtr handle = FindWindow(null, "YourApplicationName");
SetForegroundWindow(handle);
SendKeys.SendWait("{Tab}");
SendKeys.Flush();
如果您的 Tab 鍵順序設置正確,它將在您的控件中按您指定的次數進行 Tab 鍵切換。 盡管這模擬了實際輸入,因此如果您希望用戶在系統選項卡頂部提供輸入,它可能不會很好。
如果您想了解有關 WIN32 API 和鼠標和鍵盤輸入模擬的更多信息,這里有一個有用的鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.