Как использовать nsITextInputProcessor в Gecko Fx 60 C #? - PullRequest
0 голосов
/ 04 января 2019

Я использую Gecko Fx 60 (код C #) и хочу использовать nsITextInputProcessor для отправки ключа в DOM.

У меня есть ссылка на https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsITextInputProcessor. Но я не могу ..

Код создания экземпляра:

Gecko.nsITextInputProcessor test = Gecko.Xpcom.GetService<Gecko.nsITextInputProcessor>("@mozilla.org/text-input-processor;1");
        test = Gecko.Xpcom.QueryInterface<Gecko.nsITextInputProcessor>(test);

Спасибо.

1 Ответ

0 голосов
/ 07 января 2019

еще один вопрос об использовании geckofx nsITextInputProcessor

Пример кода из этого вопроса:

    private void SendKeyEvent(string type, string key, bool alt, bool ctrl, bool shift)
    {
        // Escape for JS.
        key = key.Replace("\\", "\\\\");
        var instance = Xpcom.CreateInstance<nsITextInputProcessor>("@mozilla.org/text-input-processor;1");
        using (var context = new AutoJSContext(Window))
        {
            var result = context.EvaluateScript(
                $@"new KeyboardEvent('', {{ key: '{key}', code: '', keyCode: 0, ctrlKey : {(ctrl ? "true" : "false")}, shiftKey : {(shift ? "true" : "false")}, altKey : {(alt ? "true" : "false")} }});");
            instance.BeginInputTransaction((mozIDOMWindow)((GeckoWebBrowser)this).Document.DefaultView.DomWindow, new TextInputProcessorCallback());
            instance.Keydown((nsIDOMEvent)result.ToObject(), 0, 1);
            instance.Keyup((nsIDOMEvent)result.ToObject(), 0, 1);
        }

        Marshal.ReleaseComObject(instance);
    }
...