CefSharp 73.1.120-pre01 (более старая версия также затронула) x64, Win10, WinForms
Я использую CefSharp.WinForm для «размещения» простого приложения Angular с небольшим количеством элементов управления вводом.Из-за необходимости сопоставления некоторых клавиш на клавиатуре я использую IKeyboardHandler (OnPreKeyEvent).
Когда я возвращаю "true" из OnPreKeyEvent (bool), я могу подавить изначально нажатую клавишу, НО вместо того, чтобы возвращать только одну ""преобразованное значение" он возвращает дублированное новое значение в элемент управления вводом через Интернет.
Простой вариант использования
- Я нажимаю "a" в управлении вводом
2.MyKeyHandler, который реализует метод IKeyHandler (OnPreKeyEvent), вводит свой код:
Для отправки нового ключа я использовал KeySend (Sys.Win.Form.SendKeys):
KeySend.SendWait ("{s}")
или пакет Nuget InputSimulatorPro:
InputSimulator sim = new InputSimulator ();sim.Keyboard.KeyDown (WindowsInput.Native.VirtualKeyCode.VK_S);
3.Элемент управления веб-ввода получает 2 значения символа "s".
Я пробовал комбинации SendKey.Flush / Thread.Sleep, но ничто не влияет - я всегда получаю 2 значения OUT.
Пример кода (Конец-> Tab) <- возвращает 2 вкладки (это смещает один веб-элемент управления больше, чем следует) </p>
public bool OnPreKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey, ref bool isKeyboardShortcut)
{
if (windowsKeyCode == 0x23) //End > Tab
{
SendKey.SendWait("{TAB}");
return true;
}
ЛЮБАЯ помощь будет принята с благодарностью.