Example #1
0
        internal HostBrowserControl(Formium hostWindow)
        {
            SetStyle(
                ControlStyles.ContainerControl
                | ControlStyles.ResizeRedraw
                | ControlStyles.FixedWidth
                | ControlStyles.FixedHeight
                | ControlStyles.StandardClick
                | ControlStyles.UserMouse
                | ControlStyles.SupportsTransparentBackColor
                | ControlStyles.StandardDoubleClick
                | ControlStyles.OptimizedDoubleBuffer
                | ControlStyles.CacheText
                | ControlStyles.EnableNotifyMessage
                | ControlStyles.DoubleBuffer
                | ControlStyles.OptimizedDoubleBuffer
                | ControlStyles.UseTextForAccessibility
                | ControlStyles.Opaque,
                false);
            SetStyle(
                ControlStyles.UserPaint
                | ControlStyles.AllPaintingInWmPaint
                | ControlStyles.Selectable,
                true);

            BrowserHostWindow = hostWindow;
        }
        // Register sync method that need communicate with Formium object.
        private JavaScriptValue SetTitle(Formium owner, JavaScriptValue[] arguments)
        {
            var title = arguments.FirstOrDefault(x => x.IsString)?.GetString() ?? string.Empty;

            owner.Subtitle = title;
            return(null);
        }
Example #3
0
        internal static void Setup(ChromeWidgetMessageInterceptor interceptor, Formium formium, Func <Message, bool> forwardAction)
        {
            Task.Run(() =>
            {
                try
                {
                    while (true)
                    {
                        if (BrowserWidgetHandleFinder.TryFindHandle(formium.BrowserWindowHandle, out IntPtr chromeWidgetHostHandle))
                        {
                            interceptor = new ChromeWidgetMessageInterceptor(formium.HostWindowInternal, chromeWidgetHostHandle, forwardAction);

                            if (WinFormium.Runtime.IsDebuggingMode)
                            {
                                WinFormium.GetLogger().Debug("BrowserWindow has been attached successfully.");
                            }

                            break;
                        }
                        else
                        {
                            Thread.Sleep(100);
                        }
                    }
                }
                catch
                {
                }
            });
        }
Example #4
0
        private JavaScriptValue SizeTo(Formium owner, JavaScriptValue[] arguments)
        {
            if (!owner.Resizable || owner.WindowState
                != System.Windows.Forms.FormWindowState.Normal)
            {
                return(null);
            }


            var width  = arguments.Length == 2 ? arguments[0].GetInt() : 0;
            var height = arguments.Length == 2 ? arguments[1].GetInt() : 0;

            if (width > 0 && height > 0)
            {
                owner.Size = new Size(width, height);
            }
            else if (width <= 0)
            {
                owner.Size = new Size(owner.Width, height);
            }
            else if (height <= 0)
            {
                owner.Size = new Size(width, owner.Height);
            }

            return(null);
        }
 private JavaScriptValue SetWnBrowerTileAndSubtitle(Formium owner, JavaScriptValue[] arguments)
 {
     try
     {
         if (arguments.Length == 0)
         {
             return(JavaScriptValue.CreateString("无参数"));
         }
         if (arguments.Length > 1)
         {
             var strTitle    = arguments[0].GetString();
             var strSubtitle = arguments[1].GetString();
             if (!string.IsNullOrWhiteSpace(strTitle) && !string.IsNullOrWhiteSpace(strSubtitle))
             {
                 owner.Title    = strTitle;
                 owner.Subtitle = strSubtitle;
                 Wnconfig.SetAppsettingValue("Title", strTitle);
                 Wnconfig.SetAppsettingValue("Subtitle", strSubtitle);
             }
         }
         else
         {
             JavaScriptValue.CreateString("调用失败!SetWnBrowerTileAndSubtitle至少需要两个参数!(Title,Subtitle)");
         }
     }
     catch (Exception ex)
     {
         return(JavaScriptValue.CreateString(ex.Message));
     }
     return(JavaScriptValue.CreateString("调用SetWnBrowerTileAndSubtitle成功"));
 }
        private JavaScriptValue Maximize(Formium owner, JavaScriptValue[] arguments)
        {
            if (owner.WindowType == NetDimension.NanUI.HostWindow.HostWindowType.Kiosk || !owner.CanMaximize)
            {
                return(null);
            }


            if (owner.WindowState != System.Windows.Forms.FormWindowState.Maximized)
            {
                owner.WindowState = System.Windows.Forms.FormWindowState.Maximized;
            }
            else if (owner.WindowState == System.Windows.Forms.FormWindowState.Maximized)
            {
                if (owner.IsFullScreen)
                {
                    owner.FullScreen(false);
                }
                else
                {
                    owner.WindowState = System.Windows.Forms.FormWindowState.Normal;
                }
            }

            return(null);
        }
Example #7
0
        //public WinFormiumLifeSpanHandler LifeSpanHandler => (WinFormiumLifeSpanHandler)_lifeSpanHandler;

        //public WinFormiumLoadHandler LoadHandler => (WinFormiumLoadHandler)_loadHandler;


        internal BrowserClient(Formium formium)
        {
            _owner = formium;

            _lifeSpanHandler    = new WinFormiumLifeSpanHandler(_owner);
            _loadHandler        = new WinFormiumLoadHandler(_owner);
            _dragHandler        = new WinFormiumDragHandler(_owner);
            _contextMenuHandler = new WinFormiumContextMenuHandler(_owner);
            _requestHandler     = new WinFormiumRequestHandler(_owner);
            _displayHandler     = new WinFormiumDisplayHandler(_owner);
            _dialogHandler      = new WinFormiumDialogHandler(_owner);
            _downloadHandler    = new WinFormiumDownloadHandler(_owner);
            //_focusHandler = new WinFormiumFocusHandler(_owner);
            _keyboardHandler = new WinFormiumKeyboardHandler(_owner);
            _jsDialogHandler = new WinFormiumJSDialogHandler(_owner);
            _findHandler     = new WinFormiumFindHandler(_owner);

            if (formium.WindowType == HostWindow.HostWindowType.Acrylic)
            {
                _renderHandler = new WinFormiumRenderHandlerUsingHwnd(_owner);
            }


            if (formium.WindowType == HostWindow.HostWindowType.Layered)
            {
                _renderHandler = new WinFormiumRenderHandlerUsingDeviceContext(_owner);
            }
        }
        // Register sync method that need communicate with Formium object.
        private JavaScriptValue Hello(Formium owner, JavaScriptValue[] arguments)
        {
            var msg = arguments.FirstOrDefault(x => x.IsString)?.GetString() ?? "hello world";

            MessageBox.Show(owner.HostWindow, msg, "Hello from JavaScript", MessageBoxButtons.OK, MessageBoxIcon.Information);

            return(null);
        }
Example #9
0
        public AcrylicStyleHostWindow(Formium formium) : this()
        {
            _formium = formium;

            _uiThread = WindowsFormsSynchronizationContext.Current;


            _formium.AllowFullScreen = false;
        }
Example #10
0
        private JavaScriptValue Close(Formium owner, JavaScriptValue[] arguments)
        {
            if (owner.WindowType == HostWindow.HostWindowType.Kiosk)
            {
                return(null);
            }

            owner.Close();

            return(null);
        }
        private JavaScriptValue Close(Formium owner, JavaScriptValue[] arguments)
        {
            if (owner.WindowType == NetDimension.NanUI.HostWindow.HostWindowType.Kiosk)
            {
                return(null);
            }

            owner.Close(true);

            return(null);
        }
        private JavaScriptValue Minimize(Formium owner, JavaScriptValue[] arguments)
        {
            if (owner.WindowType == NetDimension.NanUI.HostWindow.HostWindowType.Kiosk || !owner.CanMinimize)
            {
                return(null);
            }

            if (owner.WindowState != System.Windows.Forms.FormWindowState.Minimized)
            {
                owner.WindowState = System.Windows.Forms.FormWindowState.Minimized;
            }
            return(null);
        }
Example #13
0
        private JavaScriptValue GetCultureInfo(Formium owner, JavaScriptValue[] arguments)
        {
            var retval = JavaScriptValue.CreateObject();

            retval.SetValue("name", JavaScriptValue.CreateString($"{Thread.CurrentThread.CurrentCulture.Name}"));

            retval.SetValue("displayName", JavaScriptValue.CreateString($"{Thread.CurrentThread.CurrentCulture.DisplayName}"));
            retval.SetValue("englishName", JavaScriptValue.CreateString($"{Thread.CurrentThread.CurrentCulture.EnglishName}"));

            retval.SetValue("lcid", JavaScriptValue.CreateNumber(Thread.CurrentThread.CurrentCulture.LCID));

            return(retval);
        }
Example #14
0
        private JavaScriptValue FullScreen(Formium owner, JavaScriptValue[] arguments)
        {
            if (owner.WindowType == HostWindow.HostWindowType.Kiosk)
            {
                return(null);
            }

            if (owner.AllowFullScreen)
            {
                owner.FullScreen(!owner.IsFullScreen);
            }
            return(null);
        }
        private JavaScriptValue Restore(Formium owner, JavaScriptValue[] arguments)
        {
            if (owner.WindowType == NetDimension.NanUI.HostWindow.HostWindowType.Kiosk)
            {
                return(null);
            }

            if (owner.WindowState != System.Windows.Forms.FormWindowState.Normal)
            {
                owner.WindowState = System.Windows.Forms.FormWindowState.Normal;
            }

            return(null);
        }
        private JavaScriptValue UpdateWnBrowerUrlIp(Formium owner, JavaScriptValue[] arguments)
        {
            if (!Wnconfig.GetGrayFlag())
            {
                return(JavaScriptValue.CreateString("启动灰度地址失败! 已经在配置文件WinningBrowserApp.config中已经禁用灰度更新"));
            }

            if (arguments.Length == 0)
            {
                return(JavaScriptValue.CreateString("启动灰度地址失败!未传Ip参数"));
            }
            if (arguments.Length > 0)
            {
                var strNewIp  = arguments[0].GetString();
                var strUserid = "无用户名";
                var strPw     = "无密码";
                if (arguments.Length > 1)
                {
                    strUserid = arguments[1].GetString();
                    strPw     = arguments[2].GetString();
                }

                if (!string.IsNullOrEmpty(strNewIp) && !Wnconfig.GetUrl().Contains(strNewIp))
                {
                    string strGrayIp = strNewIp;
                    MessageBox.Show(string.Format("启用灰度地址:{0}", strGrayIp));
                    string msgresault = Wnconfig.SetUrlIp(strGrayIp, strUserid, strPw, true);
                    if (msgresault.Contains("失败"))
                    {
                        return(JavaScriptValue.CreateString(msgresault));
                    }

                    Thread thread = new Thread(() =>
                    {
                        try
                        {
                            MainForm.delRestart();
                        }
                        catch (Exception ex)
                        {
                        }
                    });
                    //thread.SetApartmentState(ApartmentState.STA);
                    thread.Start();
                    return(JavaScriptValue.CreateString("启动灰度地址成功(UpdateWnBrowerUrlIp)"));
                }
            }
            return(JavaScriptValue.CreateString("启动灰度地址失败!"));
        }
Example #17
0
        private JavaScriptValue GetWindowRectangle(Formium owner, JavaScriptValue[] arguments)
        {
            var retval = JavaScriptValue.CreateObject();

            var rect = new RECT();

            User32.GetWindowRect(owner.HostWindowHandle, ref rect);

            retval.SetValue("x", JavaScriptValue.CreateNumber(rect.left));
            retval.SetValue("y", JavaScriptValue.CreateNumber(rect.top));
            retval.SetValue("width", JavaScriptValue.CreateNumber(rect.Width));
            retval.SetValue("height", JavaScriptValue.CreateNumber(rect.Height));

            return(retval);
        }
Example #18
0
        public FormiumWebView(Formium formium, CefBrowserSettings settings = null, string startUrl = ABOUT_BLANK) : this()
        {
            Owner = formium;

            OwnerHandle = formium.HostWindowHandle;

            if (settings == null)
            {
                settings = WinFormium.DefaultBrowserSettings;
            }

            _settings = settings;

            _startUrl = startUrl;
        }
        // Register async method that need communicate with Formium object.
        private void HelloAsync(Formium owner, JavaScriptValue[] arguments, JavaScriptAsyncFunctionCallback callback)
        {
            var time = arguments.FirstOrDefault(x => x.IsNumber)?.GetInt() ?? 1000;
            var msg  = arguments.FirstOrDefault(x => x.IsString)?.GetString() ?? "hello world";



            Task.Run(async() =>
            {
                await Task.Delay(time);

                MessageBox.Show($"Delayed {time / 1000f} sec.");

                callback.Success(JavaScriptValue.CreateString(msg));
            });
        }
        // Register sync method that need communicate with Formium object.
        private JavaScriptValue Hello(Formium owner, JavaScriptValue[] arguments)
        {
            var msg = arguments.FirstOrDefault(x => x.IsString)?.GetString() ?? "hello world";

            if (owner.WindowState != FormWindowState.Maximized)
            {
                owner.WindowState = FormWindowState.Maximized;
            }
            else
            {
                owner.WindowState = FormWindowState.Normal;
            }


            return(null);
        }
Example #21
0
        public MaskPanel(Formium owner)
        {
            BackgroundImage       = Properties.Resources.Powered;
            BackgroundImageLayout = ImageLayout.Center;
            DoubleBuffered        = true;
            //Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;

            Dock = DockStyle.Fill;

            DragHandlerPanel = new DragPanel
            {
                Dock = DockStyle.Fill,
            };

            DragHandlerPanel.MouseDown += DragHandlerPanel_MouseDown;
            Owner = owner;
        }
Example #22
0
        private JavaScriptValue MoveTo(Formium owner, JavaScriptValue[] arguments)
        {
            if (owner.WindowType == HostWindow.HostWindowType.Kiosk || owner.WindowState
                != System.Windows.Forms.FormWindowState.Normal)
            {
                return(null);
            }

            var x = arguments.Length == 2 ? arguments[0].GetInt() : 0;
            var y = arguments.Length == 2 ? arguments[1].GetInt() : 0;


            owner.Left = x;
            owner.Top  = y;

            return(null);
        }
        private JavaScriptValue CreateShortcutOnDesktop(Formium owner, JavaScriptValue[] arguments)
        {
            try
            {
                if (arguments.Length == 0)
                {
                    return(JavaScriptValue.CreateString("无参数"));
                }
                if (arguments.Length > 0 && !string.IsNullOrWhiteSpace(arguments[0].GetString()))
                {
                    //卫宁基层卫生信息系统V5.6

                    ShortCutHelper.SetWinningBrowerShortcut(arguments[0].GetString(), Application.ExecutablePath);
                }
            }
            catch (Exception ex)
            {
                return(JavaScriptValue.CreateString(ex.Message));
            }
            return(JavaScriptValue.CreateString("调用CreateShortcutOnDesktop成功"));
        }
        private JavaScriptValue GrayEnable(Formium owner, JavaScriptValue[] arguments)
        {
            try
            {
                if (arguments.Length == 0)
                {
                    return(JavaScriptValue.CreateString("无参数"));
                }
                if (arguments.Length > 0 && !string.IsNullOrWhiteSpace(arguments[0].GetString()))
                {
                    var bGrayEnable = Convert.ToBoolean(arguments[0].GetString());

                    Wnconfig.SetAppsettingValue("GrayFlag", bGrayEnable.ToString());
                }
            }
            catch (Exception ex)
            {
                return(JavaScriptValue.CreateString(ex.Message));
            }
            return(JavaScriptValue.CreateString("调用GrayEnable成功"));
        }
Example #25
0
 public WinFormiumLoadHandler(Formium owner)
 {
     _owner = owner;
 }
 internal BorderlessStyleHostWindow(Formium formium) : this()
 {
     _formium  = formium;
     _uiThread = WindowsFormsSynchronizationContext.Current;
 }
Example #27
0
 public WinFormiumContextMenuHandler(Formium owner)
 {
     _owner = owner;
 }
Example #28
0
 public WinFormiumDialogHandler(Formium owner)
 {
     _owner = owner;
 }
        private JavaScriptValue ProcessInvok(Formium owner, JavaScriptValue[] arguments)
        {
            try
            {
                if (arguments.Length == 0)
                {
                    return(JavaScriptValue.CreateString("无参数"));
                }
                if (arguments.Length > 1)
                {
                    var strExePath = arguments[0].GetString();

                    var strArgs = arguments[1].GetString();
                    if (string.IsNullOrEmpty(strExePath))
                    {
                        return(JavaScriptValue.CreateString("无参数"));
                    }
                    if (!System.IO.File.Exists(strExePath))
                    {
                        return(JavaScriptValue.CreateString(string.Format("{0}路径不存在! 请检查路径!", strExePath)));
                    }
                    //System.Windows.Forms.MessageBox.Show(string.Format("执行路径:{0}", strExePath));
                    //System.Windows.Forms.MessageBox.Show(string.Format("传入参数:{0}", strArgs));
                    Process exep = new System.Diagnostics.Process();
                    exep.StartInfo.FileName       = strExePath;
                    exep.StartInfo.Arguments      = strArgs;
                    exep.StartInfo.CreateNoWindow = true;

                    //exep.StartInfo.UseShellExecute = false;
                    // exep.StartInfo.RedirectStandardOutput = true;
                    exep.Start();
                    //exep.WaitForExit();
                    return(JavaScriptValue.CreateString("调用成功!"));
                }
                if (arguments.Length == 1)
                {
                    string str = arguments[0].GetString();

                    System.Diagnostics.Process p = new System.Diagnostics.Process();
                    p.StartInfo.FileName               = "cmd.exe";
                    p.StartInfo.UseShellExecute        = false; //是否使用操作系统shell启动
                    p.StartInfo.RedirectStandardInput  = true;  //接受来自调用程序的输入信息
                    p.StartInfo.RedirectStandardOutput = true;  //由调用程序获取输出信息
                    p.StartInfo.RedirectStandardError  = true;  //重定向标准错误输出
                    p.StartInfo.CreateNoWindow         = true;  //不显示程序窗口
                    p.Start();                                  //启动程序

                    //向cmd窗口发送输入信息
                    // p.StandardInput.WriteLine(str);
                    p.StandardInput.WriteLine(str);
                    p.StandardInput.WriteLine("exit");//结束执行,很重要的
                    p.StandardInput.AutoFlush = true;

                    //获取cmd窗口的输出信息
                    string output = p.StandardOutput.ReadToEnd();
                    p.WaitForExit();//等待程序执行完退出进程
                    p.Close();
                    return(JavaScriptValue.CreateString(output));
                }
            }
            catch (System.Exception ex)
            {
                return(JavaScriptValue.CreateString(ex.Message));
            }
            return(null);
        }
Example #30
0
 public WinFormiumRequestHandler(Formium owner)
 {
     _owner = owner;
 }