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