投稿者 ポッキー  (社会人) 投稿日時 2025/3/3 16:04:19
指定したurlのWebサイトを「関連付けられたアプリケーションでファイルを開く」の方法を応用して開くことはできました。

関連付けられたアプリケーションでファイルを開く
https://www.umayadia.com/vbsample/sample0000/Sample093ShellEx.htm

例えば、

Dim p As Process = Process.Start("https://www.umayadia.com/")

を実行すると、通常使用するブラウザがChromeの場合、Chromeが起動し、ここにVisual Basic 中学校のトップページが表示されます。

すでにChromeが起動している場合、起動中のChromeの新しいタブに指定ページが表示されます。
これはこれでいいのですが、その場合、そのChromeブラウザが手前に表示されないことがあります。
この場合、どのようにすればそのChromeブラウザを手前に表示できるようになりますか?

色々調べたところ、Win32 APIのSetForegroundWindowを使用すれば、そのWindowを全面表示できるようですが、
今回のケースでは対象ブラウザのWindowHandleが必要になります。
そこで、上記で取得したProcessオブジェクトのMainWindowHandleを取得しようとすると、

「System.InvalidOperationException: プロセスは終了しているため、要求された情報は利用できません。」

という例外が出ます。
おそらく、上記で取得したProcessオブジェクトは通常使用するブラウザのプロセスではなく、
ファイルの関連付けで起動したShellか何かなのだろうと思いますが、
Process.Startでページを開いたブラウザのプロセスの取得方法を知りたくて、質問しました。