如何在启动进程后将焦点设置回调用表单 (Chrome)

How to Set Focus Back To Calling Form After Starting A Process (Chrome)

我使用 Process.Start() 从程序中打开 Chrome 浏览器 window,但新打开的 chrome 浏览器选项卡覆盖了屏幕。但我希望我的应用程序在创建这些 chrome 个浏览器选项卡后保持其焦点。

我将打开一个浏览器 window,但多个 chrome 选项卡显示不同的 URL。

这是我试过的,与 How to set focus back to form after opening up a process (Notepad)? 的答案相似。但对我不起作用。

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd)

// this code will get called several times with a different URL in Arguments property

Process p = new Process();
p.StartInfo = new ProcessStartInfo("Chrome.exe");
p.StartInfo.CreateNoWindow = true;

p.StartInfo.Arguments = "https:/google.com";
p.Start();

p.WaitForInputIdle();
SetForegroundWindow(this.Handle);

只是添加一个短暂的延迟似乎对我来说效果很好:

private void button1_Click(object sender, EventArgs e)
{
    OpenUrl("https:/google.com");
}

private async void OpenUrl(string url)
{
    Process p = new Process();
    p.StartInfo = new ProcessStartInfo("Chrome.exe");
    p.StartInfo.CreateNoWindow = true;
    p.StartInfo.Arguments = url;
    p.Start();
    p.WaitForInputIdle();
    await Task.Delay(50);
    SetForegroundWindow(this.Handle);
}