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