Я создал приложение WinForm, которое имеет элемент управления webBrowser, прикрепленный к свойству Fill, и перенаправляет пользователя на URL-адрес, предоставленный пользователем. Я выполняю процесс winForm из расширения Chrome, получаю дескриптор chrome и меняю родителя моего дочернего процесса ( WinForm) в браузер Chrome.
Я теряю фокус при сворачивании хрома и повторном восстановлении.
Но при переключении вкладки или из Alt + Tab, чтобы найти мой winForm .exe, фокус возвращается.
Как установить фокус моего .exe, когда пользователь заходит на мою активную вкладку.
Я написал приложение на C # и использовал API-интерфейс SetParent (дескриптор родительского дескриптора) неуправляемого кода для присоединения моего .exe.
Некоторые ссылки, которые я уже пробовал:
https://www.codeproject.com/Articles/101367/Code-to-Host-a-Third-Party-Application-in-our-Proc
Окно стыковки внутри другого окна
Размещение внешнего приложения в окне WPF
Фрагмент кода:
Прослушивание приведенного ниже фрагмента кода C # в потоке в бесконечном цикле while для получения сообщений из моего 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....
}
});
* +1034 *});
Ожидаемый результат:
При переключении вкладки фокус сохраняется, но при минимизации и восстановлении фокус теряется.