public static void PressSoftKey(string keystring, EffectiveKey effectiveKey, bool isshiftpressed, bool iscapslock) { Key key = KeyFromStringFullKeyboard(keystring, effectiveKey, isshiftpressed, iscapslock); if (key != Key.None) { byte keyCode = unchecked ((byte)KeyInterop.VirtualKeyFromKey(key)); //处理输入法切换,不同的系统不同的处理方式 if (key == (Key.LeftShift | Key.LeftCtrl)) { SoftKeyboardManager.PressAKey(16); ////win8-win10Shift //if (OSVersionHelper.IsWindows8OrGreater) //{ // //16是Shift虚拟键值 // SoftKeyboardManager.PressAKey(16); //} ////XP-win7 Shift+Ctrl //else if (OSVersionHelper.IsWindowsXPOrGreater) //{ // byte keyCodectrl = unchecked((byte)KeyInterop.VirtualKeyFromKey(Key.LeftCtrl)); // SoftKeyboardManager.PressDoubleKey(16, keyCodectrl); //} } else { if (!isshiftpressed) { SoftKeyboardManager.PressAKey(keyCode); } else { SoftKeyboardManager.PressDoubleKey(16, keyCode); } } } }
static Key KeyFromStringFullKeyboard(string key, EffectiveKey effectiveKey, bool isshiftpressed, bool iscapslock) { if (!string.IsNullOrEmpty(key)) { switch (key) { case "1": case "!": return(Key.D1); case "2": case "@": return(Key.D2); case "3": case "#": return(Key.D3); case "4": case "$": return(Key.D4); case "5": case "%": return(Key.D5); case "6": case "^": return(Key.D6); case "7": case "&": return(Key.D7); case "8": case "*": return(Key.D8); case "9": case "(": return(Key.D9); case "0": case ")": return(Key.D0); case "-": case "_": return(Key.OemMinus); case "=": case "+": return(Key.OemPlus); case ";": case ":": return(Key.OemSemicolon); case ",": case "<": return(Key.OemComma); case ".": case ">": return(Key.OemPeriod); case "\"": case "'": return(Key.OemQuotes); case "?": case "/": return(Key.OemQuestion); case "[": case "{": return(Key.OemOpenBrackets); case "]": case "}": return(Key.OemCloseBrackets); case "Space": return(Key.Space); case "Caps": return(Key.CapsLock); case "Shift": return(Key.LeftShift); case "Enter": return(Key.Enter); case "←": case "System.Windows.Controls.Image": return(Key.Back); case "ch/en": return(Key.LeftShift | Key.LeftCtrl); default: Key result = Key.None; if (Enum.TryParse(key.ToUpper(), out result)) { return(result); } break; } } return(Key.None); }