Windows アプリケーションで Webブラウザーを起動してURLを開く
Windows アプリケーションで Webブラウザを起動してURLを開くコードを紹介します。
概要
WindowsアプリケーションでWebブラウザを起動してURLを開く場合は、System.Diagnostics 名前空間のProcessクラスを用いるか、Windows APIのShellExecute()関数を用います。
プログラム例:System.Diagnostics.Processを利用する場合
WPF アプリケーションを作成します。
UI
下図のUIを作成します。フォームにボタンを一つ配置します。
UIのXAMLコードは下記になります。
<Window x:Class="OpenWebsite.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Content="Button" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="87" Height="24" Click="Button_Click"/>
</Grid>
</Window>
コード
下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace OpenWebsite
{
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
public enum ShowCommands : int
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
System.Diagnostics.Process.Start("http://www.ipentec.com");
}
}
}
解説
System.Diagnostics名前空間のProcessクラスのStartメソッドを呼び出してプロセスを開始します。引数(実行ファイル)にURLを与えるとデフォルトのWebブラウザで与えられたURLを開きます。
実行結果
上記のプロジェクトを実行します。下図のウィンドウが表示されます。
[Button]をクリックするとWebブラウザが開き、指定したURLのWebページが開かれます。
プログラム例:Windows API の ShellExecuteを利用する場合
WPFアプリケーションを作成します。
UI
下図のUIを作成します。先ほどのUIにボタンを一つ追加します。
UIのXAMLコードは下記になります。
<Window x:Class="OpenWebsite.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Content="Button" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="87" Height="24" Click="Button_Click"/>
<Button Content="Button" HorizontalAlignment="Left" Margin="102,10,0,0" VerticalAlignment="Top" Width="87" RenderTransformOrigin="0.939,0.553" Height="24"/>
</Grid>
</Window>
コード
下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Interop;
using System.Runtime.InteropServices;
namespace OpenWebsite
{
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
public enum ShowCommands : int
{
SW_HIDE = 0,
SW_SHOWNORMAL = 1,
SW_NORMAL = 1,
SW_SHOWMINIMIZED = 2,
SW_SHOWMAXIMIZED = 3,
SW_MAXIMIZE = 3,
SW_SHOWNOACTIVATE = 4,
SW_SHOW = 5,
SW_MINIMIZE = 6,
SW_SHOWMINNOACTIVE = 7,
SW_SHOWNA = 8,
SW_RESTORE = 9,
SW_SHOWDEFAULT = 10,
SW_FORCEMINIMIZE = 11,
SW_MAX = 11
}
[DllImport("shell32.dll")]
static extern IntPtr ShellExecute(IntPtr hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, ShowCommands nShowCmd);
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
System.Diagnostics.Process.Start("http://www.ipentec.com");
}
//Process を用いたコードは省略
private void Button_Click_1(object sender, RoutedEventArgs e)
{
HwndSource source = HwndSource.FromVisual(this) as HwndSource;
IntPtr handle = source.Handle;
ShellExecute(handle, "open", "http://www.ipentec.com/", null, null, ShowCommands.SW_SHOW);
}
}
}
解説
DllImportを用いてShellExecute()関数をインポートします。WPFアプリケーションの場合は、ウィンドウハンドルはHandleSource.FromVisual()メソッドで取得します。
ShellExecuteの第三引数(実行ファイル)にURLを与えるとデフォルトのWebブラウザで与えられたURLを開きます。
実行結果
上記のプロジェクトを実行します。下図のウィンドウが表示されます。
ShellExecuteのコードをClickイベントに実装したほうの[Button]をクリックします。Webブラウザが表示され指定したURLが開かれます。
補足:Windows FormsアプリでShellExecute()を呼び出す場合
Windows FormでShellExecuteを呼び出す場合についての補足です。
UI
下図のUIを作成します。フォームにボタンを一つ配置します。
コード
下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace OpenWebsiteWindowsForm
{
public partial class FormMain : Form
{
public enum ShowCommands : int
{
SW_HIDE = 0,
SW_SHOWNORMAL = 1,
SW_NORMAL = 1,
SW_SHOWMINIMIZED = 2,
SW_SHOWMAXIMIZED = 3,
SW_MAXIMIZE = 3,
SW_SHOWNOACTIVATE = 4,
SW_SHOW = 5,
SW_MINIMIZE = 6,
SW_SHOWMINNOACTIVE = 7,
SW_SHOWNA = 8,
SW_RESTORE = 9,
SW_SHOWDEFAULT = 10,
SW_FORCEMINIMIZE = 11,
SW_MAX = 11
}
[DllImport("shell32.dll")]
static extern IntPtr ShellExecute(IntPtr hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, ShowCommands nShowCmd);
public FormMain()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ShellExecute(this.Handle, "open", "http://www.ipentec.com/", null, null, ShowCommands.SW_SHOW);
}
}
}
解説
Windows Formの場合はウィンドウハンドルはウィンドウのHandleプロパティで取得できるため、ShellExecuteの第一引数はthis.Handleとします。
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
[button]をクリックします。ウェブブラウザが表示され、指定したURLのWebページが開かれます。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用