外部アプリケーションを起動する方法は「外部アプリケーションを起動する」で説明しましたが、ここではさらにウィンドウの状態(最大化、最小化、非表示)を指定して起動する方法を紹介します。
Process.Startメソッドでアプリケーションを起動する場合は、ProcessStartInfo.WindowStyleプロパティを変更し、ProcessStartInfo.UseShellExecuteプロパティをTrueにして、Process.Startメソッドを呼び出します。
WindowStyleプロパティには、ProcessWindowStyle列挙体の値を指定できます。ProcessWindowStyle列挙体には、以下のようなメンバがあります。
メンバ名 | 説明 |
---|---|
Hidden | 非表示のウィンドウスタイルを指定します。 |
Maximized | 最大化されたウィンドウスタイルを指定します。 |
Minimized | 最小化されたウィンドウスタイルを指定します。 |
Normal | 通常の表示ウィンドウスタイルを指定します。デフォルト。 |
例えば、メモ帳を最小化状態で起動するには、以下のようにします。
'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)
//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を指定した場合は、非表示で起動するかはそのアプリケーションに任されるため、アプリケーションによっては非表示になりません。
起動するアプリケーションのウィンドウを表示しないようにするには、ProcessStartInfo.WindowStyleプロパティをHiddenにする以外に、ProcessStartInfo.CreateNoWindowプロパティをTrueにする方法もあります。
起動するアプリケーションがコンソールアプリケーションで、ウィンドウ(コマンドプロンプト、コンソールウィンドウ)を表示しない場合は、CreateNoWindowプロパティをTrueにします。この時、ProcessStartInfo.UseShellExecuteプロパティは必ずFalseにします。
起動するアプリケーションがGUIアプリケーションでウィンドウを表示しない場合は、WindowStyleプロパティをHiddenにします。この時、UseShellExecuteプロパティは必ずTrueにします。ただし、前述したように、このようにしてもウィンドウは表示されるかもしれません。
CreateNoWindowプロパティをTrueにしてコンソールウィンドウを表示しないようにした例は「DOSコマンドを実行し出力データを取得する」で紹介していますので、そちらをご覧ください。
VB.NETであればInteraction.Shellメソッドを使ってアプリケーションを起動できますが、この時、2番目の引数にウィンドウの状態をAppWinStyle列挙体の値で指定することができます。AppWinStyle列挙体のメンバを表にすると、以下のようになります(MSDNからの引用です)。
メンバ名 | 説明 |
---|---|
Hide | ウィンドウは非表示になり、フォーカスは非表示ウィンドウに渡されます。 |
MaximizedFocus | ウィンドウはフォーカスを持った状態で最大化されます。 |
MinimizedFocus | ウィンドウはフォーカスを持った状態でアイコンとして表示されます。 |
MinimizedNoFocus | ウィンドウはアイコンとして表示されます。現在アクティブなウィンドウはアクティブなままです。デフォルト。 |
NormalFocus | ウィンドウはフォーカスを保持し、元のサイズと位置に戻されます。 |
NormalNoFocus | ウィンドウは最後に表示されたときのサイズと位置に戻されます。現在アクティブなウィンドウはアクティブなままです。 |
このようにWindowStyleプロパティとは違い、ウィンドウが通常の大きさか最小化の場合は、アクティブにするかしないかも指定できます。
以下の例では、メモ帳を通常のウィンドウサイズで、アクティブにせずに起動しています。
'メモ帳を通常のウィンドウサイズで、アクティブにせずに起動する
Shell("""notepad.exe""", AppWinStyle.NormalNoFocus)
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。