DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

ウィンドウの状態を最大化、最小化、非表示にして、外部アプリケーションを起動する

外部アプリケーションを起動する方法は「外部アプリケーションを起動する」で説明しましたが、ここではさらにウィンドウの状態(最大化、最小化、非表示)を指定して起動する方法を紹介します。

ProcessStartInfo.WindowStyleプロパティを使用する方法

Process.Startメソッドでアプリケーションを起動する場合は、ProcessStartInfo.WindowStyleプロパティを変更し、ProcessStartInfo.UseShellExecuteプロパティをTrueにして、Process.Startメソッドを呼び出します。

WindowStyleプロパティには、ProcessWindowStyle列挙体の値を指定できます。ProcessWindowStyle列挙体には、以下のようなメンバがあります。

メンバ名 説明
Hidden 非表示のウィンドウスタイルを指定します。
Maximized 最大化されたウィンドウスタイルを指定します。
Minimized 最小化されたウィンドウスタイルを指定します。
Normal 通常の表示ウィンドウスタイルを指定します。デフォルト。

例えば、メモ帳を最小化状態で起動するには、以下のようにします。

VB.NET
コードを隠すコードを選択
'ProcessStartInfoオブジェクトを作成する
Dim psi As New System.Diagnostics.ProcessStartInfo()
'メモ帳の実行ファイルのパスを指定する
psi.FileName = "notepad.exe"
'WindowStyleにMinimizedを指定して、最小化された状態で起動されるようにする
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized
'UseShellExecuteをTrueにする(デフォルトでTrueなので、変更する必要なし)
'psi.UseShellExecute = true;
'アプリケーションを起動する
Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start(psi)
C#
コードを隠すコードを選択
//ProcessStartInfoオブジェクトを作成する
System.Diagnostics.ProcessStartInfo psi =
    new System.Diagnostics.ProcessStartInfo();
//メモ帳の実行ファイルのパスを指定する
psi.FileName = "notepad.exe";
//WindowStyleにMinimizedを指定して、最小化された状態で起動されるようにする
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
//UseShellExecuteをTrueにする(デフォルトでTrueなので、変更する必要なし)
//psi.UseShellExecute = true;
//アプリケーションを起動する
System.Diagnostics.Process p = System.Diagnostics.Process.Start(psi);

ただしProcessWindowStyleを変更してアプリケーションを起動したとしても、その通りになるかは分かりません。特にHiddenを指定した場合は、非表示で起動するかはそのアプリケーションに任されるため、アプリケーションによっては非表示になりません。

「WindowStyle = Hidden」と「CreateNoWindow = True」の違い

起動するアプリケーションのウィンドウを表示しないようにするには、ProcessStartInfo.WindowStyleプロパティをHiddenにする以外に、ProcessStartInfo.CreateNoWindowプロパティをTrueにする方法もあります。

起動するアプリケーションがコンソールアプリケーションで、ウィンドウ(コマンドプロンプト、コンソールウィンドウ)を表示しない場合は、CreateNoWindowプロパティをTrueにします。この時、ProcessStartInfo.UseShellExecuteプロパティは必ずFalseにします。

起動するアプリケーションがGUIアプリケーションでウィンドウを表示しない場合は、WindowStyleプロパティをHiddenにします。この時、UseShellExecuteプロパティは必ずTrueにします。ただし、前述したように、このようにしてもウィンドウは表示されるかもしれません。

CreateNoWindowプロパティをTrueにしてコンソールウィンドウを表示しないようにした例は「DOSコマンドを実行し出力データを取得する」で紹介していますので、そちらをご覧ください。

VB.NETでInteraction.Shellメソッドを使用する方法

VB.NETであればInteraction.Shellメソッドを使ってアプリケーションを起動できますが、この時、2番目の引数にウィンドウの状態をAppWinStyle列挙体の値で指定することができます。AppWinStyle列挙体のメンバを表にすると、以下のようになります(MSDNからの引用です)。

メンバ名 説明
Hide ウィンドウは非表示になり、フォーカスは非表示ウィンドウに渡されます。
MaximizedFocus ウィンドウはフォーカスを持った状態で最大化されます。
MinimizedFocus ウィンドウはフォーカスを持った状態でアイコンとして表示されます。
MinimizedNoFocus ウィンドウはアイコンとして表示されます。現在アクティブなウィンドウはアクティブなままです。デフォルト。
NormalFocus ウィンドウはフォーカスを保持し、元のサイズと位置に戻されます。
NormalNoFocus ウィンドウは最後に表示されたときのサイズと位置に戻されます。現在アクティブなウィンドウはアクティブなままです。

このようにWindowStyleプロパティとは違い、ウィンドウが通常の大きさか最小化の場合は、アクティブにするかしないかも指定できます。

以下の例では、メモ帳を通常のウィンドウサイズで、アクティブにせずに起動しています。

VB.NET
コードを隠すコードを選択
'メモ帳を通常のウィンドウサイズで、アクティブにせずに起動する
Shell("""notepad.exe""", AppWinStyle.NormalNoFocus)
  • 履歴:
  • 2016/5/17 コメントとコードが合っていなかったのを修正。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。