示例#1
0
        /// <summary>
        /// Creates array of INPUT from string.
        /// </summary>
        /// <param name="str">String to be converted into INPUT[].</param>
        /// <returns>INPUT[]</returns>
        public static WinAPI.INPUT[] AddString(string str)
        {
            var result = new List <WinAPI.INPUT>();
            var index  = 0;

            foreach (var s in str)
            {
                bool   uselt1_vk, uselt2_vk;
                ushort resultvk = 0;
                short  lt1_vk   = WinAPI.VkKeyScanEx(s, Mahou.MahouUI.MAIN_LAYOUT1);
                uselt1_vk = lt1_vk != -1;
                short lt2_vk = WinAPI.VkKeyScanEx(s, Mahou.MahouUI.MAIN_LAYOUT2);
                uselt2_vk = lt2_vk != -1;
                if (uselt1_vk && uselt2_vk)
                {
                    var guess = Mahou.KMHook.WordGuessLayout(GetWordByIndex(str, index));
                    //              System.Diagnostics.Debug.WriteLine("ST:"+guess.Item2);
                    var lt_guess = guess.Item2;
                    resultvk = (ushort)WinAPI.VkKeyScanEx(s, lt_guess);
                }
                else if (uselt1_vk)
                {
                    resultvk = (ushort)lt1_vk;
                }
                else if (uselt2_vk)
                {
                    resultvk = (ushort)lt2_vk;
                }
                bool resultvk_state = ((resultvk >> 8) & 0xff) == 1;
                if (resultvk_state)
                {
                    result.Add(KInputs.AddKey(Keys.RShiftKey, true));
                }
                var down = new WinAPI.INPUT {
                    Type = WinAPI.INPUT_KEYBOARD,
                    Data =
                    {
                        Keyboard      = new WinAPI.KEYBDINPUT {
                            Vk        = MahouUI.GuessKeyCodeFix ? resultvk : (ushort)0,
                            Flags     = (UInt32)(WinAPI.KEYEVENTF_UNICODE),
                            Scan      = (UInt16)s,
                            ExtraInfo = IntPtr.Zero,
                            Time      = 0
                        }
                    }
                };
                var up = new WinAPI.INPUT {
                    Type = WinAPI.INPUT_KEYBOARD,
                    Data =
                    {
                        Keyboard      = new WinAPI.KEYBDINPUT {
                            Vk        = MahouUI.GuessKeyCodeFix ? resultvk : (ushort)0,
                            Flags     = (UInt32)(WinAPI.KEYEVENTF_UNICODE | WinAPI.KEYEVENTF_KEYUP),
                            Scan      = (UInt16)s,
                            ExtraInfo = IntPtr.Zero,
                            Time      = 0
                        }
                    }
                };
                if (s == '\n')
                {
                    down = AddKey(Keys.Return, true);
                    up   = AddKey(Keys.Return, false);
                }
                result.Add(down);
                result.Add(up);
                if (resultvk_state)
                {
                    result.Add(KInputs.AddKey(Keys.RShiftKey, false));
                }
                index++;
            }
            return(result.ToArray());
        }