Плагины для Human Emulator CEF

вопросы связанные с работой версии с Chromium
Аватара пользователя
Support
Site Admin
Сообщения: 1000
Зарегистрирован: 10 апр 2009, 17:45
Контактная информация:

Re: Плагины для Human Emulator CEF

Сообщение Support » 15 июн 2018, 14:10

kutuzoff писал(а):
15 июн 2018, 13:15
Ну как с нуля создавать, какие библиотеки подключать, что куда вставлять и что за что отвечает в коде. Вообщем, начиная с создания нового проекта, и до подключения плагина в хуман и его использования.
Записали в todo.

Аватара пользователя
spaiker
Сообщения: 33
Зарегистрирован: 14 сен 2017, 02:01

Re: Плагины для Human Emulator CEF

Сообщение spaiker » 16 окт 2018, 13:59

А как из плагина запустить какую то команду в Хумане? например browser->navigate.

Аватара пользователя
Support
Site Admin
Сообщения: 1000
Зарегистрирован: 10 апр 2009, 17:45
Контактная информация:

Re: Плагины для Human Emulator CEF

Сообщение Support » 16 окт 2018, 14:28

spaiker писал(а):
16 окт 2018, 13:59
А как из плагина запустить какую то команду в Хумане? например browser->navigate.
в IPluginConnector есть string IPluginConnector.RunCommand(string[] command, Microsoft.Owin.IFormCollection args)
передаём в него

command[0]="Browser";
command[1]="navigate";

ну и параметры через args передать.

Аватара пользователя
spaiker
Сообщения: 33
Зарегистрирован: 14 сен 2017, 02:01

Re: Плагины для Human Emulator CEF

Сообщение spaiker » 16 окт 2018, 17:48

Support писал(а):
16 окт 2018, 14:28
spaiker писал(а):
16 окт 2018, 13:59
А как из плагина запустить какую то команду в Хумане? например browser->navigate.
в IPluginConnector есть string IPluginConnector.RunCommand(string[] command, Microsoft.Owin.IFormCollection args)
передаём в него

command[0]="Browser";
command[1]="navigate";

ну и параметры через args передать.
А пример можете скинуть что бы при нажатии на кнопку был переход на Гугль?

Аватара пользователя
Support
Site Admin
Сообщения: 1000
Зарегистрирован: 10 апр 2009, 17:45
Контактная информация:

Re: Плагины для Human Emulator CEF

Сообщение Support » 16 окт 2018, 23:51

spaiker писал(а):
16 окт 2018, 17:48
А пример можете скинуть что бы при нажатии на кнопку был переход на Гугль?
 /// <summary>
        /// закладка Быстрый Старт
        /// </summary>
        public partial class SampleUserControl : UserControl
    {

        /// <summary>
        /// объект плагина для подключения к Human Emulator
        /// </summary>
        SampleXHEObjectPlugin _objPlugin;

        #region создание

        /// <summary>
        /// конструктор
        /// </summary>
        public SampleUserControl()
        {
            InitializeComponent();            

        }

        /// <summary>
        /// конструктор
        /// </summary>
        public SampleUserControl(SampleXHEObjectPlugin objPlugin)
        {
            InitializeComponent();

            // присоединяем контрол
            Dock = DockStyle.Fill;

            _objPlugin = objPlugin;
        }


        private void button1_Click(object sender, EventArgs e)
        {
            Dictionary<string, string[]> args = new Dictionary<string, string[]>();
            args["url"] = new string[] { "google.com" };

            _objPlugin.RunHumanCommand("Browser.navigate",  new Microsoft.Owin.FormCollection(args));
        }

        #endregion

        private void SampleUserControl_Load(object sender, EventArgs e)
        {

        }
    }
 /// <summary>
        /// палагин объекта выполнения команд SampleXHEObject
        /// </summary>
        public class SampleXHEObjectPlugin : Object, IPlugin
        {
            #region информация для хумана

            /// <summary>
            /// имя плагина
            /// </summary>
            string IPlugin.GetFullName(string language)
            {
                return "SampleXHEObject";
            }

            /// <summary>
            /// версия плагина
            /// </summary>
            string IPlugin.GetVersion(string language)
            {
                return "1.1";
            }

            /// <summary>
            /// имя плагина (если исполняемый палгин - то имя объекта)
            /// </summary>
            string IPlugin.GetAuthor(string language)
            {
                return "XHE";
            }

            /// <summary>
            /// показываемое имя плагина
            /// </summary>
            string IPlugin.GetDisplayName(string language)
            {
                return "Sample XHE Plugin";
            }


            /// <summary>
            /// описание плагина
            /// </summary>
            string IPlugin.GetDescription(string language)
            {
                return "Desciption of Sample XHE Plugin";
            }


            /// <summary>
            /// категория плагина
            /// </summary>
            string IPlugin.GetCategory(string language)
            {
                return "Samples";
            }


            /// <summary>
            /// подкатегория плагина
            /// </summary>
            string IPlugin.GetSubCategory(string language)
            {
                return "";
            }

            /// <summary>
            /// флаги содержимого плагина 
            /// (0 бит - плагин поддерживает выполнение команд )
            /// (1 бит - плагин содержит диалог )
            /// (2 бит - плагин содержит докующуюся панель )
            /// </summary>
            int IPlugin.PluginContentFlags
            {
                get
                {
                    return 3;
                }
            }


            #endregion

            #region инициализация 

            /// <summary>
            /// барузер (задается в XHE)
            /// </summary>
            IPluginConnector _Connector = null;

        /// <summary>
        /// инициализация
        /// </summary>
        /// <param name="connector"></param>
        void IPlugin.Init(IPluginConnector connector)
            {
                _Connector = connector;
            }

            #endregion

            #region выполнение команд

            //
            public static string aNotFound = "command not found";

            // тестовая команда
            string test_command(string param1, string param2)
            {
                return "test command : praam1 = " + param1 + " , param2 = " + param2;
            }

            /// <summary>
            /// выполнение команд от owin 
            /// </summary>
            /// <param name="command">имя команды</param>
            /// <param name="args">аргументы команды</param>
            /// <returns></returns>
            string IPlugin.RunCommand(string command, Microsoft.Owin.IFormCollection args)
            {
                // выпорлняем команду
                if (command == "test_command")
                    return test_command(args["param1"], args["param2"]);

                // не нашли команду
                return "command not found";
            }

            /// <summary>
            /// выполнение команд Human Emulator
            /// </summary>
            /// <param name="command">имя команды</param>
            /// <param name="args">аргументы команды</param>
            /// <returns></returns>
            public string RunHumanCommand(string command, Microsoft.Owin.IFormCollection args)
            {
                string[] array = command.Split(new string[] { "." }, StringSplitOptions.RemoveEmptyEntries);

                if (_Connector != null)
                    return _Connector.RunCommand(array, args);

                // не нашли команду
                return "command not found";
            }
            #endregion

            #region конрол для вставки в диалог палагина

            /// <summary>
            /// создать User Control
            /// </summary>
            /// <returns>визуальное представление плагина</returns>
            Control IPlugin.CreateControl()
            {
                /*
                    Label pluginLabel = new Label();
                    pluginLabel.Visible = true;
                    try
                    {
                        // браузер
                        pluginLabel.Text = "Web Browser : " + _Connector.GetBrowser()+"\r\n";

                        // редактор
                        if (_Connector.GetEditor("")!=null)
                        {
                            var editor = _Connector.GetEditor("");
                            pluginLabel.Text += "Scintilla Editor : " + _Connector.GetEditor("")+"\r\n";
                            pluginLabel.Text += "version : " + editor.GetVersionInfo()+"\r\n\\r\n";
                        }
                        else
                            pluginLabel.Text += "No current editor";

                        // дерево
                        pluginLabel.Text += "Tree : " + _Connector.GetQuickStartTree()+"\r\n";
                    }
                    catch( Exception ex)
                    {
                        pluginLabel.Text+=ex.Message;
                    }
                    return pluginLabel;*/
                // добавить контрол с прокси чекером
                SampleUserControl proxyCtrl = new SampleUserControl(this);

                return proxyCtrl;

            }

            #endregion

        }
Можно не создавать свою RunHumanCommand, а сразу использовать функцию string IPlugin.RunCommand(string command, Microsoft.Owin.IFormCollection args).

Как правильно вызывать команды "Browser.navigate" и параметры args["url"] = new string[] { "google.com" }; можно посмотреть через панель Информации
там будет подобный текст
Application.quit
   =>
true 
23:49:11 Browser.get_last_navigation_error
   =>
 
23:49:09 Browser.IsBusy?num=-1
   =>
true 
23:49:07 Browser.navigate?url=http://www.ya.ru&use_cache=1
   =>
true 
23:49:07 Debug.set_cur_script_path?path=C:\XWeb Studio\Human Emulator Studio 7.0.20\My Scripts\4.php
   =>
true 
то есть как раз название объекта и функция Browser.navigate, а также параметры url=http://www.ya.ru&use_cache=1 и т.д.

Также для управления Хуманом из своего кода C# по прежнему можно использовать XHE.dll.

Ответить