C# 窗口焦点丢失在最小化/恢复chrome浏览器窗口和chrome扩展上
我已经创建了WinForm应用程序,它的webBrowser控件与Fill属性对接,并将用户重定向到用户提供的URL。我正在从chrome扩展执行WinForm进程,获得chrome的句柄,并将我的子进程(WinForm)的父进程更改为chrome浏览器进程 当我最小化chrome并再次恢复时,我失去了焦点 但在切换选项卡或从Alt+tab查找我的winForm.exe时,焦点又回来了 如何在用户进入我的活动选项卡时设置my.exe的焦点 我用C#编写了应用程序,并使用非托管代码SetParent(子句柄,父句柄)API来附加我的.exe 我已经尝试了一些链接: 代码段: 在无限while循环中的线程中侦听下面的C#代码片段,以从my main.js获取消息C# 窗口焦点丢失在最小化/恢复chrome浏览器窗口和chrome扩展上,c#,winforms,google-chrome,google-chrome-extension,C#,Winforms,Google Chrome,Google Chrome Extension,我已经创建了WinForm应用程序,它的webBrowser控件与Fill属性对接,并将用户重定向到用户提供的URL。我正在从chrome扩展执行WinForm进程,获得chrome的句柄,并将我的子进程(WinForm)的父进程更改为chrome浏览器进程 当我最小化chrome并再次恢复时,我失去了焦点 但在切换选项卡或从Alt+tab查找我的winForm.exe时,焦点又回来了 如何在用户进入我的活动选项卡时设置my.exe的焦点 我用C#编写了应用程序,并使用非托管代码SetParen
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 Extension main.js:
chrome.windows.onFocusChanged.addListener(函数(){
}))
预期产出:
切换选项卡时,焦点将保留,但最小化并恢复时,焦点将丢失
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....
}
});