これは多少の回避策ですが、開始できる場合があります。System.Diagnostics.Process.ProcessIdを使用しました。IEを使用した例として、なぜこれを使用したのかを後で説明します。コードは「迅速で汚い」だけですが、概念実証として作成しました。
IEでgoogleを開くボタンが1つある基本的なWinFormアプリを作成しました。アプリケーションで既に開いている場合は、再度開くことはありません。
System.Diagnosticsリファレンスを追加しました。
public int ProcessID;
public Form1()
{
InitializeComponent();
}
private void MyButton_Click(object sender, EventArgs e)
{
if (ProcessID == null)
{
StartIE();
}
else
{
if (!ProcessIsRunning())
{
StartIE();
}
}
}
private bool ProcessIsRunning()
{
bool ProcessRunning = false;
foreach (Process p in Process.GetProcesses())
{
try
{
if (p.Id == ProcessID)
{
ProcessRunning = true;
}
}
catch { }
}
return ProcessRunning;
}
private void StartIE()
{
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = "iexplore.exe";
proc.StartInfo.Arguments = "http://www.google.be";
proc.Start();
ProcessID = proc.Id;
}
これはあなたが要求したことを完全には行いませんが、それは良いスタートかもしれません。私がこのようにした理由はいくつかあり、可能なオプションは何ですか。
- URLをファイル名として使用すると、実際にデフォルトのブラウザでWebページが開きますが、processIDは返されません。これが、スニペットがIEの使用法を示している理由です。(このオプションを使用する場合は、System.IO.File.Existsを使用して、目的のブラウザーがインストールされていることを確認できます)
- このオプションを使用する場合は、レジストリにクエリを実行してデフォルトのブラウザを取得できます。デフォルトのブラウザがある場合は、レジストリから取得した値からブラウザを起動できます。次に、process.startinfo.filenameをこの値に変更すると、デフォルトのブラウザーが起動しますが、それでもprocessIdが取得されるため、これが先の方法である可能性があります。これを行う方法は、ここで確認できます:http ://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/b200903e-ce69-4bd4-a436-3e20a7632dc4
- インターネットウィンドウがすでに開いている場合は、SetForegroundWindowプロパティを使用して表示できます。これはこの記事ですでに文書化されているため、このスニペットには追加しませんでした。
これがあなたをあなたの道に導くのに役立つことを願っています。