TimeSpan GetTimeToCompleteTrigger(KeyValue keyValue, KeyValue lastKeyValue, int repetition) { if (keyValue.FunctionKey.HasValue) { FunctionKeys functionKey = keyValue.FunctionKey.Value; if (FunctionKeysWithIgnoredStringValue.Contains(functionKey)) { keyValue = new KeyValue(functionKey); } } //check if this key has any override times if (overrideTimesByKey.TryGetValue(keyValue, out var timeSpanOverrides) && timeSpanOverrides.CompletionTimes != null) { if (lastKeyValue == null || keyValue != lastKeyValue) { return(TimeSpan.FromMilliseconds(Convert.ToDouble(timeSpanOverrides.CompletionTimes.First()))); } else if (timeSpanOverrides.CompletionTimes.Count() > repetition) { return(TimeSpan.FromMilliseconds(Convert.ToDouble(timeSpanOverrides.CompletionTimes[repetition]))); } else { return(TimeSpan.FromMilliseconds(Convert.ToDouble(timeSpanOverrides.CompletionTimes.Last()))); } } //if this key does not have overrides then get the time from setting or use the default else { return(timeToCompleteTriggerByKey.GetValueOrDefault(keyValue, defaultTimeToCompleteTrigger)); } }
public override ScriptSecrets Refresh(IKeyValueConverterFactory factory) { var secrets = new HostSecrets { MasterKey = factory.WriteKey(MasterKey), FunctionKeys = FunctionKeys.Select(k => factory.WriteKey(k)).ToList() }; return(secrets); }
private void PublishKeyPress(FunctionKeys functionKey) { if (keyStateService.SimulateKeyStrokes) { var virtualKeyCode = functionKey.ToVirtualKeyCode(); if (virtualKeyCode != null) { Log.InfoFormat("Publishing function key '{0}' => as virtual key code {1}", functionKey, virtualKeyCode); publishService.KeyDownUp(virtualKeyCode.Value); } } }
void Awake() { if (Instance != null && Instance != this) { Destroy(gameObject); } else { Instance = this; DontDestroyOnLoad(gameObject); } }
private void PublishKeyPress(FunctionKeys functionKey) { if (keyStateService.SimulateKeyStrokes) { Log.DebugFormat("KeyDownUp called with functionKey '{0}'.", functionKey); var virtualKeyCode = functionKey.ToVirtualKeyCode(); if (virtualKeyCode != null) { publishService.KeyDownUp(virtualKeyCode.Value); } } }
private bool CurrentUserHasAccess( FunctionKeys functionKey, IList <string> userRoleNames, IDictionary <FunctionKeys, AppFunction> appFunctionDict) { AppFunction appFunc; if (!appFunctionDict.TryGetValue(functionKey, out appFunc)) { return(false); } return(appFunc.GetRoles().Any(r => userRoleNames.Contains(r.Name))); }
TimeSpan GetTimeToCompleteTrigger(KeyValue keyValue) { if (keyValue.FunctionKey.HasValue) { FunctionKeys functionKey = keyValue.FunctionKey.Value; if (FunctionKeysWithIgnoredStringValue.Contains(functionKey)) { keyValue = new KeyValue(functionKey); } } return(timeToCompleteTriggerByKey.GetValueOrDefault(keyValue, defaultTimeToCompleteTrigger)); }
TimeSpan GetTimeToLockOn(KeyValue keyValue) { if (keyValue.FunctionKey.HasValue) { FunctionKeys functionKey = keyValue.FunctionKey.Value; if (FunctionKeysWithIgnoredStringValue.Contains(functionKey)) { keyValue = new KeyValue(functionKey); } } if (overrideTimesByKey.TryGetValue(keyValue, out var timeSpanOverrides)) { return(timeSpanOverrides.LockOnTime); } return(defaultLockOnTime); }
TimeSpan GetTimeToCompleteTrigger(KeyValue keyValue, KeyValue lastKeyValue, int keystroke) { if (keyValue.FunctionKey.HasValue) { FunctionKeys functionKey = keyValue.FunctionKey.Value; if (FunctionKeysWithIgnoredStringValue.Contains(functionKey)) { keyValue = new KeyValue(functionKey); } } //check if this key has any override times var hasOverride = overrideTimesByKey.TryGetValue(keyValue, out TimeSpanOverrides timeSpanOverrides); if (hasOverride && timeSpanOverrides.TimeRequiredToLockDown > TimeSpan.Zero && keystroke == 2) { return(timeSpanOverrides.TimeRequiredToLockDown); } var completionTimes = hasOverride && timeSpanOverrides.CompletionTimes != null && timeSpanOverrides.CompletionTimes.Any() ? timeSpanOverrides.CompletionTimes : timeToCompleteTriggerByKey.GetValueOrDefault(keyValue, defaultTimeToCompleteTrigger).Split(',').ToList(); if (lastKeyValue == null || keyValue != lastKeyValue) { return(TimeSpan.FromMilliseconds(double.Parse(completionTimes.First()))); } if (completionTimes.Count > keystroke) { return(TimeSpan.FromMilliseconds(double.Parse(completionTimes[keystroke]))); } return(TimeSpan.FromMilliseconds(double.Parse(completionTimes.Last()))); }
public void ProcessFunctionKey(FunctionKeys functionKey) { Log.DebugFormat("Processing captured function key '{0}'", functionKey); lastTextChangeWasSuggestion = false; switch (functionKey) { case FunctionKeys.BackMany: if (!string.IsNullOrEmpty(Text)) { var backManyCount = Text.CountBackToLastCharCategoryBoundary(); dictionaryService.DecrementEntryUsageCount(Text.Substring(Text.Length - backManyCount, backManyCount).Trim()); var textAfterBackMany = Text.Substring(0, Text.Length - backManyCount); var textChangedByBackMany = Text != textAfterBackMany; Text = textAfterBackMany; if (backManyCount == 0) { backManyCount = 1; //Always publish at least one backspace } for (int i = 0; i < backManyCount; i++) { PublishKeyPress(FunctionKeys.BackOne); ReleaseUnlockedKeys(); } if (textChangedByBackMany || string.IsNullOrEmpty(Text)) { AutoPressShiftIfAppropriate(); } StoreLastTextChange(null); GenerateAutoCompleteSuggestions(); Log.Debug("Suppressing next auto space."); suppressNextAutoSpace = true; } else { //Scratchpad is empty, but publish 1 backspace anyway, as per the behaviour for 'BackOne' PublishKeyPress(FunctionKeys.BackOne); } break; case FunctionKeys.BackOne: var backOneCount = string.IsNullOrEmpty(lastTextChange) ? 1 //Default to removing one character if no lastTextChange : lastTextChange.Length; var textChangedByBackOne = false; if (!string.IsNullOrEmpty(Text)) { if (Text.Length < backOneCount) { backOneCount = Text.Length; //Coallesce backCount if somehow the Text length is less } var textAfterBackOne = Text.Substring(0, Text.Length - backOneCount); textChangedByBackOne = Text != textAfterBackOne; if (backOneCount > 1) { //Removing more than one character - only decrement removed string dictionaryService.DecrementEntryUsageCount(Text.Substring(Text.Length - backOneCount, backOneCount).Trim()); } else if (!string.IsNullOrEmpty(lastTextChange) && lastTextChange.Length == 1 && !char.IsWhiteSpace(lastTextChange[0])) { dictionaryService.DecrementEntryUsageCount(Text.InProgressWord(Text.Length)); //We are removing a non-whitespace character - decrement the in progress word dictionaryService.IncrementEntryUsageCount(textAfterBackOne.InProgressWord(Text.Length)); //And increment the in progress word that is left after the removal } Text = textAfterBackOne; } for (int i = 0; i < backOneCount; i++) { PublishKeyPress(FunctionKeys.BackOne); ReleaseUnlockedKeys(); } if (textChangedByBackOne || string.IsNullOrEmpty(Text)) { AutoPressShiftIfAppropriate(); } StoreLastTextChange(null); GenerateAutoCompleteSuggestions(); Log.Debug("Suppressing next auto space."); suppressNextAutoSpace = true; break; case FunctionKeys.ClearScratchpad: Text = null; StoreLastTextChange(null); ClearSuggestions(); AutoPressShiftIfAppropriate(); Log.Debug("Suppressing next auto space."); suppressNextAutoSpace = true; break; case FunctionKeys.Suggestion1: SwapLastTextChangeForSuggestion(0); lastTextChangeWasSuggestion = true; break; case FunctionKeys.Suggestion2: SwapLastTextChangeForSuggestion(1); lastTextChangeWasSuggestion = true; break; case FunctionKeys.Suggestion3: SwapLastTextChangeForSuggestion(2); lastTextChangeWasSuggestion = true; break; case FunctionKeys.Suggestion4: SwapLastTextChangeForSuggestion(3); lastTextChangeWasSuggestion = true; break; case FunctionKeys.Suggestion5: SwapLastTextChangeForSuggestion(4); lastTextChangeWasSuggestion = true; break; case FunctionKeys.Suggestion6: SwapLastTextChangeForSuggestion(5); lastTextChangeWasSuggestion = true; break; default: if (functionKey.ToVirtualKeyCode() != null) { //Key corresponds to physical keyboard key GenerateAutoCompleteSuggestions(); //If the key cannot be pressed or locked down (these are handled in //ReactToPublishableKeyDownStateChanges) then publish it and release unlocked keys var keyValue = new KeyValue(functionKey); if (!KeyValues.KeysWhichCanBePressedOrLockedDown.Contains(keyValue)) { PublishKeyPress(functionKey); ReleaseUnlockedKeys(); } } if (functionKey == FunctionKeys.LeftShift) { shiftStateSetAutomatically = false; } break; } }
public KeyValue(FunctionKeys functionKey) { this.functionKey = functionKey; this.str = null; }
//http://inputsimulator.codeplex.com/SourceControl/latest#WindowsInput/Native/VirtualKeyCode.cs //http://msdn.microsoft.com/en-gb/library/windows/desktop/dd375731(v=vs.85).aspx public static VirtualKeyCode?ToVirtualKeyCode(this FunctionKeys functionKey) { switch (functionKey) { case FunctionKeys.BackOne: return(VirtualKeyCode.BACK); case FunctionKeys.LeftShift: return(VirtualKeyCode.LSHIFT); case FunctionKeys.LeftAlt: return(VirtualKeyCode.LMENU); //This is not a typo ALT=MENU case FunctionKeys.LeftCtrl: return(VirtualKeyCode.LCONTROL); case FunctionKeys.LeftWin: return(VirtualKeyCode.LWIN); case FunctionKeys.F1: return(VirtualKeyCode.F1); case FunctionKeys.F2: return(VirtualKeyCode.F2); case FunctionKeys.F3: return(VirtualKeyCode.F3); case FunctionKeys.F4: return(VirtualKeyCode.F4); case FunctionKeys.F5: return(VirtualKeyCode.F5); case FunctionKeys.F6: return(VirtualKeyCode.F6); case FunctionKeys.F7: return(VirtualKeyCode.F7); case FunctionKeys.F8: return(VirtualKeyCode.F8); case FunctionKeys.F9: return(VirtualKeyCode.F9); case FunctionKeys.F10: return(VirtualKeyCode.F10); case FunctionKeys.F11: return(VirtualKeyCode.F11); case FunctionKeys.F12: return(VirtualKeyCode.F12); case FunctionKeys.PrintScreen: return(VirtualKeyCode.SNAPSHOT); //This is not a typo case FunctionKeys.ScrollLock: return(VirtualKeyCode.SCROLL); case FunctionKeys.NumberLock: return(VirtualKeyCode.NUMLOCK); case FunctionKeys.Menu: return(VirtualKeyCode.APPS); //This is not a typo case FunctionKeys.ArrowUp: return(VirtualKeyCode.UP); case FunctionKeys.ArrowDown: return(VirtualKeyCode.DOWN); case FunctionKeys.ArrowLeft: return(VirtualKeyCode.LEFT); case FunctionKeys.ArrowRight: return(VirtualKeyCode.RIGHT); case FunctionKeys.Break: return(VirtualKeyCode.CANCEL); case FunctionKeys.Insert: return(VirtualKeyCode.INSERT); case FunctionKeys.Home: return(VirtualKeyCode.HOME); case FunctionKeys.PgUp: return(VirtualKeyCode.PRIOR); case FunctionKeys.PgDn: return(VirtualKeyCode.NEXT); case FunctionKeys.Delete: return(VirtualKeyCode.DELETE); case FunctionKeys.End: return(VirtualKeyCode.END); case FunctionKeys.Escape: return(VirtualKeyCode.ESCAPE); default: return(null); } }
public SchedulingApiService(FunctionKeys functionKeys, IHttpClientFactory httpClientFactory, string baseAddress) : base(httpClientFactory, baseAddress) { this.functionKeys = functionKeys; }
public MainWindowViewModel(AppConnector appConnector) { this.appConnector = appConnector; M = new MainWindowModel(this.appConnector); DialogViewModel = new DialogViewModel(M.DialogModel); ResultControlViewModel = new ResultControlViewModel(M.ResultControlModel); FullScreenResultControlViewModel = new ResultControlViewModel(M.FullScreenResultControlModel); ViewModels = new Dictionary <Screen, IViewModel>() { { Screen.MainMenu, new MainMenuViewModel() }, { Screen.GroupMenu, new GroupMenuViewModel() }, { Screen.OneTouchMenu, new OneTouchMenuViewModel() }, }; foreach (KeyValuePair <Screen, IViewModel> p in ViewModels) { IViewModel vm = p.Value; vm.Model = M.Models[p.Key]; } StepColors = new ObservableCollection <SolidColorBrush>() { Brushes.White, Brushes.White, Brushes.White, Brushes.White, }; ShowVersionDialog = new DelegateCommand(() => { M.DialogModel.ShowDialog($"TRS係員操作端末 MS-12\n\n\nVersion {ProductVersion}\n\n{Copyright}\n\n\n\nバージョン及び著作権の詳細は、取扱説明書をご覧下さい。", "バージョン情報"); }); List <ITicketPlugin> ticketPlugins = M.Plugins.TicketPlugins.ConvertAll(p => p.Plugin); TicketInputControls = ticketPlugins.ConvertAll(t => t.InputControl); TicketKeyControls = ticketPlugins.ConvertAll(t => t.KeyControl); FClicked = M.FunctionKeyCommands; foreach (KeyValuePair <FunctionKeys, bool> item in FIsChecked) { M.FunctionKeyToggleButtonsIsChecked.Add(item); } M.PropertyChanged += new PropertyChangedEventHandler((sender, e) => { switch (e.PropertyName) { case nameof(M.CurrentScreen): Screen showedControl = Screen.None; try { showedControl = ViewModels.First(p => p.Value.Visibility == Visibility.Visible).Key; ViewModels[(Screen)showedControl].Visibility = Visibility.Hidden; } catch { } if (M.CurrentScreen == Screen.Tickets) { } else if (M.CurrentScreen != Screen.None) { IModel model = ViewModels[M.CurrentScreen].Model; ViewModels[M.CurrentScreen].Visibility = Visibility.Visible; } if (M.CurrentScreen == Screen.None) { MainGridIsEnabled = false; DoEvents(); } else if (showedControl == Screen.None) { MainGridIsEnabled = true; } break; case nameof(M.IsTicketSending): MainGridIsEnabled2 = !M.IsTicketSending; DoEvents(); break; case nameof(M.SendType): foreach (SendTypes type in Enum.GetValues(typeof(SendTypes))) { SendTypeButtonsIsChecked[type] = M.SendType == type; } break; case nameof(M.IsOneTimeMode): LogBox4 = M.IsOneTimeMode ? "一件操作中" : ""; break; } }); M.ResultControlModel.PropertyChanged += new PropertyChangedEventHandler((sender, e) => { if (e.PropertyName == nameof(M.ResultControlModel.SendResult)) { if (M.ResultControlModel.IsVisible) { KeyControlVisibility = Visibility.Hidden; InputControlIsEnabled = false; KeyControlIsEnabled = false; } else { KeyControlVisibility = Visibility.Visible; InputControlIsEnabled = true; KeyControlIsEnabled = true; } DoEvents(); } }); M.FullScreenResultControlModel.PropertyChanged += new PropertyChangedEventHandler((sender, e) => { if (e.PropertyName == nameof(M.FullScreenResultControlModel.SendResult)) { if (M.FullScreenResultControlModel.IsVisible) { InputControlVisibility = Visibility.Hidden; KeyControlVisibility = Visibility.Hidden; InputControlIsEnabled = false; KeyControlIsEnabled = false; } else { InputControlVisibility = Visibility.Visible; KeyControlVisibility = Visibility.Visible; InputControlIsEnabled = true; KeyControlIsEnabled = true; } DoEvents(); } }); M.FunctionKeyToggleButtonsIsChecked.CollectionChanged += new NotifyCollectionChangedEventHandler((sender, e) => { try { FunctionKeys key = M.FunctionKeyToggleButtonsIsChecked.First(c => c.Value != FIsChecked[c.Key]).Key; FIsChecked[key] = M.FunctionKeyToggleButtonsIsChecked[key]; } catch { } }); FIsChecked.CollectionChanged += new NotifyCollectionChangedEventHandler((sender, e) => { try { FunctionKeys key = FIsChecked.First(c => c.Value != M.FunctionKeyToggleButtonsIsChecked[c.Key]).Key; M.FunctionKeyToggleButtonsIsChecked[key] = FIsChecked[key]; } catch { } }); SendTypeButtonsIsChecked.CollectionChanged += new NotifyCollectionChangedEventHandler((sender, e) => { SendTypes?currentType = null; try { currentType = SendTypeButtonsIsChecked.First(b => b.Value).Key; } catch { } M.SendType = currentType; }); }
public void ProcessFunctionKey(FunctionKeys functionKey) { Log.DebugFormat("Processing captured function key '{0}'", functionKey); lastTextChangeWasSuggestion = false; switch (functionKey) { case FunctionKeys.BackMany: if (!string.IsNullOrEmpty(Text)) { var backManyCount = Text.CountBackToLastCharCategoryBoundary(); dictionaryService.DecrementEntryUsageCount(Text.Substring(Text.Length - backManyCount, backManyCount).Trim()); var textAfterBackMany = Text.Substring(0, Text.Length - backManyCount); var textChangedByBackMany = Text != textAfterBackMany; Text = textAfterBackMany; if (backManyCount == 0) backManyCount = 1; //Always publish at least one backspace for (int i = 0; i < backManyCount; i++) { PublishKeyPress(FunctionKeys.BackOne); ReleaseUnlockedKeys(); } if (textChangedByBackMany || string.IsNullOrEmpty(Text)) { AutoPressShiftIfAppropriate(); } StoreLastTextChange(null); GenerateAutoCompleteSuggestions(); Log.Debug("Suppressing next auto space."); suppressNextAutoSpace = true; } else { //Scratchpad is empty, but publish 1 backspace anyway, as per the behaviour for 'BackOne' PublishKeyPress(FunctionKeys.BackOne); } break; case FunctionKeys.BackOne: var backOneCount = string.IsNullOrEmpty(lastTextChange) ? 1 //Default to removing one character if no lastTextChange : lastTextChange.Length; var textChangedByBackOne = false; if (!string.IsNullOrEmpty(Text)) { if (Text.Length < backOneCount) { backOneCount = Text.Length; //Coallesce backCount if somehow the Text length is less } var textAfterBackOne = Text.Substring(0, Text.Length - backOneCount); textChangedByBackOne = Text != textAfterBackOne; if (backOneCount > 1) { //Removing more than one character - only decrement removed string dictionaryService.DecrementEntryUsageCount(Text.Substring(Text.Length - backOneCount, backOneCount).Trim()); } else if(!string.IsNullOrEmpty(lastTextChange) && lastTextChange.Length == 1 && !Char.IsWhiteSpace(lastTextChange[0])) { dictionaryService.DecrementEntryUsageCount(Text.InProgressWord(Text.Length)); //We are removing a non-whitespace character - decrement the in progress word dictionaryService.IncrementEntryUsageCount(textAfterBackOne.InProgressWord(Text.Length)); //And increment the in progress word that is left after the removal } Text = textAfterBackOne; } for (int i = 0; i < backOneCount; i++) { PublishKeyPress(FunctionKeys.BackOne); ReleaseUnlockedKeys(); } if (textChangedByBackOne || string.IsNullOrEmpty(Text)) { AutoPressShiftIfAppropriate(); } StoreLastTextChange(null); GenerateAutoCompleteSuggestions(); Log.Debug("Suppressing next auto space."); suppressNextAutoSpace = true; break; case FunctionKeys.ClearScratchpad: Text = null; StoreLastTextChange(null); ClearSuggestions(); AutoPressShiftIfAppropriate(); Log.Debug("Suppressing next auto space."); suppressNextAutoSpace = true; break; case FunctionKeys.Suggestion1: SwapLastTextChangeForSuggestion(0); lastTextChangeWasSuggestion = true; break; case FunctionKeys.Suggestion2: SwapLastTextChangeForSuggestion(1); lastTextChangeWasSuggestion = true; break; case FunctionKeys.Suggestion3: SwapLastTextChangeForSuggestion(2); lastTextChangeWasSuggestion = true; break; case FunctionKeys.Suggestion4: SwapLastTextChangeForSuggestion(3); lastTextChangeWasSuggestion = true; break; case FunctionKeys.Suggestion5: SwapLastTextChangeForSuggestion(4); lastTextChangeWasSuggestion = true; break; case FunctionKeys.Suggestion6: SwapLastTextChangeForSuggestion(5); lastTextChangeWasSuggestion = true; break; default: if (functionKey.ToVirtualKeyCode() != null) { //Key corresponds to physical keyboard key GenerateAutoCompleteSuggestions(); //If the key cannot be pressed or locked down (these are handled in //ReactToPublishableKeyDownStateChanges) then publish it and release unlocked keys var keyValue = new KeyValue { FunctionKey = functionKey }; if (!KeyValues.KeysWhichCanBePressedDown.Contains(keyValue) && !KeyValues.KeysWhichCanBeLockedDown.Contains(keyValue)) { PublishKeyPress(functionKey); ReleaseUnlockedKeys(); } } if (functionKey == FunctionKeys.LeftShift) { shiftStateSetAutomatically = false; } break; } }
private void PublishKeyPress(FunctionKeys functionKey) { if (keyboardService.KeyDownStates[KeyValues.SimulateKeyStrokesKey].Value.IsDownOrLockedDown()) { Log.DebugFormat("KeyDownUp called with functionKey '{0}'.", functionKey); var virtualKeyCode = functionKey.ToVirtualKeyCode(); if (virtualKeyCode != null) { publishService.KeyDownUp(virtualKeyCode.Value); } } }
public override IEnumerator <Key> GetEnumerator() { return(FunctionKeys.GetEnumerator()); }
public KeyValue(FunctionKeys functionKey, string str) { this.functionKey = functionKey; this.str = str; }
//http://inputsimulator.codeplex.com/SourceControl/latest#WindowsInput/Native/VirtualKeyCode.cs //http://msdn.microsoft.com/en-gb/library/windows/desktop/dd375731(v=vs.85).aspx public static VirtualKeyCode?ToVirtualKeyCode(this FunctionKeys functionKey) { switch (functionKey) { case FunctionKeys.BackOne: return(VirtualKeyCode.BACK); case FunctionKeys.BrowserBack: return(VirtualKeyCode.BROWSER_BACK); case FunctionKeys.BrowserForward: return(VirtualKeyCode.BROWSER_FORWARD); case FunctionKeys.BrowserHome: return(VirtualKeyCode.BROWSER_HOME); case FunctionKeys.BrowserSearch: return(VirtualKeyCode.BROWSER_SEARCH); case FunctionKeys.LeftShift: return(VirtualKeyCode.LSHIFT); case FunctionKeys.LeftAlt: return(VirtualKeyCode.LMENU); //This is not a typo ALT=MENU case FunctionKeys.LeftCtrl: return(VirtualKeyCode.LCONTROL); case FunctionKeys.LeftWin: return(VirtualKeyCode.LWIN); case FunctionKeys.F1: return(VirtualKeyCode.F1); case FunctionKeys.F2: return(VirtualKeyCode.F2); case FunctionKeys.F3: return(VirtualKeyCode.F3); case FunctionKeys.F4: return(VirtualKeyCode.F4); case FunctionKeys.F5: return(VirtualKeyCode.F5); case FunctionKeys.F6: return(VirtualKeyCode.F6); case FunctionKeys.F7: return(VirtualKeyCode.F7); case FunctionKeys.F8: return(VirtualKeyCode.F8); case FunctionKeys.F9: return(VirtualKeyCode.F9); case FunctionKeys.F10: return(VirtualKeyCode.F10); case FunctionKeys.F11: return(VirtualKeyCode.F11); case FunctionKeys.F12: return(VirtualKeyCode.F12); case FunctionKeys.F13: return(VirtualKeyCode.F13); case FunctionKeys.F14: return(VirtualKeyCode.F14); case FunctionKeys.F15: return(VirtualKeyCode.F15); case FunctionKeys.F16: return(VirtualKeyCode.F16); case FunctionKeys.F17: return(VirtualKeyCode.F17); case FunctionKeys.F18: return(VirtualKeyCode.F18); case FunctionKeys.F19: return(VirtualKeyCode.F19); case FunctionKeys.PrintScreen: return(VirtualKeyCode.SNAPSHOT); //This is not a typo case FunctionKeys.ScrollLock: return(VirtualKeyCode.SCROLL); case FunctionKeys.NumberLock: return(VirtualKeyCode.NUMLOCK); case FunctionKeys.Menu: return(VirtualKeyCode.APPS); //This is not a typo case FunctionKeys.ArrowUp: return(VirtualKeyCode.UP); case FunctionKeys.ArrowDown: return(VirtualKeyCode.DOWN); case FunctionKeys.ArrowLeft: return(VirtualKeyCode.LEFT); case FunctionKeys.ArrowRight: return(VirtualKeyCode.RIGHT); case FunctionKeys.Break: return(VirtualKeyCode.CANCEL); case FunctionKeys.Insert: return(VirtualKeyCode.INSERT); case FunctionKeys.Home: return(VirtualKeyCode.HOME); case FunctionKeys.NumPad0: return(VirtualKeyCode.NUMPAD0); case FunctionKeys.NumPad1: return(VirtualKeyCode.NUMPAD1); case FunctionKeys.NumPad2: return(VirtualKeyCode.NUMPAD2); case FunctionKeys.NumPad3: return(VirtualKeyCode.NUMPAD3); case FunctionKeys.NumPad4: return(VirtualKeyCode.NUMPAD4); case FunctionKeys.NumPad5: return(VirtualKeyCode.NUMPAD5); case FunctionKeys.NumPad6: return(VirtualKeyCode.NUMPAD6); case FunctionKeys.NumPad7: return(VirtualKeyCode.NUMPAD7); case FunctionKeys.NumPad8: return(VirtualKeyCode.NUMPAD8); case FunctionKeys.NumPad9: return(VirtualKeyCode.NUMPAD9); case FunctionKeys.PgUp: return(VirtualKeyCode.PRIOR); case FunctionKeys.PgDn: return(VirtualKeyCode.NEXT); case FunctionKeys.Delete: return(VirtualKeyCode.DELETE); case FunctionKeys.End: return(VirtualKeyCode.END); case FunctionKeys.Escape: return(VirtualKeyCode.ESCAPE); default: return(null); } }