.NET TIPS Visual Basic 2005で多重起動禁止時に最初のインスタンスにパラメータを渡すには?[VS 2005のみ、VB]デジタルアドバンテージ 遠藤 孝信2007/10/25 |
|
|
Visual Basic 2005でWindowsアプリケーションの多重起動を禁止するには?では、複数のWindowsアプリケーションの実行を制限する方法について解説しているが、単純に2つ目のインスタンスの起動を禁止するのではなく、すでに起動している最初のインスタンスで新たなコンテンツを開くようにしたい場合がある。
例えば、たいていの音楽再生アプリケーションでは、.MP3ファイルをエクスプローラでダブルクリックすることにより、現在の再生を中断して、いまダブルクリックされた.MP3ファイルを新たに再生するようになっている。
このようなアプリケーションを作成するには、2つ目のインスタンス起動時のコマンドライン引数を、最初のインスタンスで受け取ることができればよい*1。Visual Basic 2005のアプリケーション・フレームワーク*2を利用して多重起動を禁止する場合には、StartupNextInstanceイベント・ハンドラとなるメソッドのパラメータで、2つ目のインスタンスに指定されたコマンドライン引数を受け取ることができる。
*1 特定の拡張子と関連付けられたアプリケーションは、その拡張子のファイルをエクスプローラでダブルクリックすることにより、そのファイルがコマンドライン引数で指定された状態で実行される。また、エクスプローラでアプリケーションにファイルをドラッグ&ドロップしても、そのファイルがコマンドライン引数で指定された状態でアプリケーションが実行される。 *2 VB 2005のアプリケーション・フレームワークについては「TIPS:Visual Basic 2005のアプリケーション・フレームワークとは?」を参照。 |
以下では記述例として、コマンドライン引数で指定されたテキスト・ファイルを、常に1つのインスタンスで開くサンプル・アプリケーションを作成する。
単一インスタンスでテキスト・ファイルを開くサンプル・アプリケーション
まず、コマンドライン引数で指定されたファイルを開き、その内容をテキストボックスで表示する処理をLoadイベント・ハンドラで記述する。ここではフォーム(Form1)上にテキストボックス(TextBox1)が配置されているものとする。また、そのテキストボックスではMultilineプロパティをTrueに設定し、複数行表示できるようにしておく。
| |
リスト1 指定されたファイルをテキストボックスで表示するLoadイベント・ハンドラ |
コマンドライン引数の取得に関しては「TIPS:コマンドライン引数を取得するには?」を、ReadAllTextメソッドによるファイルの読み込みに関しては「TIPS:テキスト・ファイルの内容を簡単に読み込むには?」を参照していただきたい。
次に、StartupNextInstanceイベント・ハンドラを以下のように記述する。StartupNextInstanceイベント・ハンドラの追加に関しては、「TIPS:Visual Basic 2005で多重起動禁止時にメッセージを出すには?」で解説している。
| |
リスト2 StartupNextInstanceイベント・ハンドラ | |
実際に記述するのは白字部分のみ。グレーの部分は自動作成される。 |
StartupNextInstanceイベント・ハンドラでは、第2パラメータであるStartupNextInstanceEventArgsオブジェクト(Microsoft.VisualBasic.ApplicationService名前空間)のCommandLineプロパティから、2つ目のインスタンスに指定されたコマンドライン引数を取得できる。CommandLineプロパティの値は、ReadOnlyCollectionクラス(System.Collections.ObjectModel名前空間)のオブジェクトである。
なお、リスト1のEnvironment.GetCommandLineArgsメソッドが返す文字列配列では、2番目の要素がコマンドラインの第1引数となるのに対して(1番目の要素はアプリケーション自体のフル・パス名)、リスト2のCommandLineプロパティでは先頭の要素がコマンドラインの第1引数となる点に少し注意が必要だ。
利用可能バージョン:.NET Framework 2.0のみ カテゴリ:Visual Studio 2005 処理対象:プロジェクト カテゴリ:Visual Basic 2005 処理対象:アプリケーション・フレームワーク 使用ライブラリ:StartupNextInstanceEventArgsクラス(Microsoft.VisualBasic.ApplicationService名前空間) 使用ライブラリ:ReadOnlyCollectionクラス(System.Collections.ObjectModel名前空間) 関連TIPS:Visual Basic 2005でWindowsアプリケーションの多重起動を禁止するには? 関連TIPS:Visual Basic 2005のアプリケーション・フレームワークとは? 関連TIPS:コマンドライン引数を取得するには? 関連TIPS:テキスト・ファイルの内容を簡単に読み込むには? 関連TIPS:Visual Basic 2005で多重起動禁止時にメッセージを出すには? |
|
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|