Window Focus失去了最小化/还原chrome浏览器窗口和chrome扩展程序

时间:2019-05-09 16:00:18

标签: c# winforms google-chrome google-chrome-extension

我创建了WinForm应用程序,该应用程序的webBrowser控件与Fill属性停靠在一起,并将用户重定向到用户提供的URL。我正在从chrome Extension执行winForm进程并获取chrome的句柄并更改子进程的父级( WinForm)到Chrome浏览器进程。

当我最小化镶边并再次还原时,我失去了焦点。

但是在切换选项卡或从Alt + Tab定位到我的winForm .exe时,焦点又回来了。

每当用户进入我的活动标签时,如何设置.exe的焦点。

我已经用C#编写了应用程序,并使用了非托管代码SetParent(子句柄,父句柄)API来附加我的.exe。

一些我已经尝试过的链接:

https://www.codeproject.com/Articles/101367/Code-to-Host-a-Third-Party-Application-in-our-Proc

Docking Window inside another Window

Hosting external app in WPF window

代码段:

在无限的while循环中在线程中侦听以下C#代码段,以从我的main.js中获取消息

private void SetAsParent()

{

            try

            {

                Process[] p = Process.GetProcessesByName("chrome");

                foreach (Process item in p)

                {

                    if (!String.IsNullOrEmpty(item.MainWindowTitle))

                    {

                        if (item.MainWindowTitle.Contains("Some Title to match my condition to show the exe...."))

                        {

                            this.Top = 78;

                            this.Left = 0;

                            SetParent(this.Handle, item.MainWindowHandle);

                            this.Visible = true;

                            this.Show();

                            this.Focus();

                            webBrowser.Navigate(some URL);

                            webBrowser.Size = new Size(1366, 979);//dynamic values coming from chrome main.js message via postMessage()

                         }

                    }

                                                                                else

                                                                                {

                                                                                this.Hide();

                                                                                }

                }

                this.Size = new Size(1366, 979);

            }

            catch (Exception ex)

            {

                Debug.WriteLine("Inside Form Load : {0}", ex.Message.ToString());

            }

        }



        [DllImport("user32.dll")]

        static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
  

Chrome Extenion main.js:

     

chrome.windows.onFocusChanged.addListener(function(){

chrome.windows.getCurrent(function(window){

    console.log(window.state);

    if(window.state == "normal")

                            {

       Some message to port...

    }

                            else if(window.state == "maximized")

                            {

                                            Focus message to port...

    }

                            else if(window.state == "minimized")

                            {

                                            Minimised message to port....

    }

});
     

});

预期输出:

在切换选项卡时,焦点会保留,但是在最小化和恢复时,焦点会丢失。

0 个答案:

没有答案