private ChromeWidgetMessageInterceptor(IntPtr window, IntPtr childHandle, IFramelessOptions framelessOptions, Action <Message> forwardAction)
        {
            _parentHandle     = window;
            _childHandle      = childHandle;
            _childWndProc     = WndProc;
            _framelessOptions = framelessOptions;

            _childWndProcHandle = Marshal.GetFunctionPointerForDelegate(_childWndProc);
            _oldWindProc        = NativeMethods.SetWindowLongPtr(_childHandle, (int)WindowLongFlags.GWLP_WNDPROC, _childWndProcHandle);
            NativeMethods.SetWindowLongPtr(_childHandle, (int)WindowLongFlags.GWLP_USERDATA, _oldWindProc);
            _forwardAction = forwardAction;
        }
Пример #2
0
 /// <summary>
 /// Asynchronously wait for the Chromium widget window to be created for the given ChromiumWebBrowser,
 /// and when created hook into its Windows message loop.
 /// </summary>
 /// <param name="window">The browser window to intercept Windows messages for.</param>
 /// <param name="framelessOptions">The frameless options.</param>
 /// <param name="forwardAction">This action will be called whenever a Windows message is received.</param>
 internal static void Setup(IntPtr window, IFramelessOptions framelessOptions, Action <Message> forwardAction)
 {
     Task.Run(() =>
     {
         try
         {
             bool foundWidget = false;
             while (!foundWidget)
             {
                 if (ChromeWidgetHandleFinder.TryFindHandle(window, out var chromeWidgetHostHandle))
                 {
                     foundWidget = true;
                     new ChromeWidgetMessageInterceptor(window, chromeWidgetHostHandle, framelessOptions, forwardAction);
                 }
                 else
                 {
                     // Chrome hasn't yet set up its message-loop window.
                     Thread.Sleep(10);
                 }
             }
         }
         catch { }
     });
 }
        public static ChromelyConfiguration WithFramelessOptions(this ChromelyConfiguration configuration, IFramelessOptions framelessOptions)
        {
            if (configuration != null)
            {
                if (configuration.HostPlacement == null)
                {
                    throw new Exception("HostPlacement cannot be null.");
                }

                configuration.HostPlacement.FramelessOptions = framelessOptions;
            }

            return(configuration);
        }