Visual Basic 6.0 からアプリケーションを実行または終了する必要がある開発者の多くは、シェルコマンドに依存しています。ただし、API 関数を使用して同じタスクを実行することもできます。
コーディングの時間です。任意の日付の最終日と初日を計算する簡単なVBプロジェクトを作成しましょう。Visual Studioを起動し、新規プロジェクトを開始します。3つのコマンドボタン(cmdCheck、cmdClose、cmdStart)を追加します。画面は図A
のようになるはずです。
図A |
![]() |
3 つのコマンド ボタンを含む簡単なプロジェクトを作成します。 |
さて、プロジェクトを具体化するために、簡単なコードを追加しましょう。次のコードを一般宣言セクションのイベントに追加します:
Private sAppName As String, sAppPath As String
リストAのコードをcmdCheck_Click()イベントに追加します。次に、 cmdClose_Click()イベントに次のコードを追加します:
'close application
Call EndTask(sAppName)
cmdStart_Click()イベントに次のコードを追加します:
'アプリケーションを起動します
Shell sAppPath, vbMinimizedFocus
次に、 Form_Load()イベントに次のコードを追加します:
sAppName = “Adobe Photoshop”
sAppPath = “D:\program files\Adobe\Photoshop 6.0\Photoshp.exe”
この例ではAdobe Photoshopを使用しました。実装では適切な実行ファイルを指定するだけです。モジュールとリストBのコードを追加し、[Ctrl][F5]キーを押してプロジェクトを実行します。
「ステータスを確認」ボタンをクリックすると、アプリケーションが実行されていないことを示すメッセージボックスが表示されます。「アプリケーションを開始」ボタンをクリックすると、アプリケーションが起動しているのを確認できます。もう一度「ステータスを確認」をクリックすると、アプリケーションが実行中であることがわかります。「アプリケーションを閉じる」ボタンをクリックすると、アプリケーションウィンドウが閉じます。
これはどのように動作するのでしょうか。Form_Load
イベントで、実行するアプリケーションの名前とパスを格納する2 つの変数 ( sAppNameとsAppPath )に値を割り当てます。 cmdStart_Clickイベントで、よく知られたシェル コマンドを使用してアプリケーションを起動します。cmdCheck_Clickイベントで、関数IsTaskRunning (モジュールで定義) を呼び出し、アプリケーションの名前 (ウィンドウ名) を渡します。関数が true の値を返した場合は、アプリケーションが実行中であることを示すメッセージ ボックスが表示されます。関数が false を返した場合は、アプリケーションが実行中でないことを示すメッセージ ボックスが表示されます。cmdClose_Clickイベントで、 EndTask (モジュールで定義)を呼び出してアプリケーションを終了します。
アプリケーションが実行中かどうかを確認するそれでは、 IsTaskRunningとEndTask
で何が起こるかを見てみましょう。IsTaskRunningは、ウィンドウ名をパラメータsWindowNameとして受け取ります。特定のアプリケーションが実行中かどうかを確認するには、FindWindow API 関数を呼び出します。FindWindow 関数が0 を返す場合、ウィンドウが見つからなかったため、アプリケーションは実行されていません。それ以外の値が返された場合、アプリケーションは実行中です。
EndTask関数は、ウィンドウ名をsWindowNameパラメータとして受け取ります。この関数は、ウィンドウ名sWindowNameを持つアプリケーションが実行中かどうかを、FindWindow API 関数を使用して確認します。ウィンドウが見つからない場合は、アプリケーションが実行されていないことを意味するため、何もする必要はありません。アプリケーションが実行中の場合は、IsWindow API 関数を呼び出して、ウィンドウ ハンドラーが有効かどうかを確認します。有効でない場合は、そのまま終了します。有効であれば、アプリケーションを終了します。アプリケーションを終了するには、 GetWindowLongを使用します。これは、指定されたウィンドウのウィンドウ構造から情報を取得し、ウィンドウが無効 ( WS_DISABLED ) になっていないかどうかを確認する API 関数です。
PostMessage API関数は、アプリケーションを終了し、指定されたウィンドウ(TargetHwnd)のキューにメッセージをポストします。この例では、WM_CLOSE引数を指定したPostMessageは、そのウィンドウのシステムメニューの「閉じる」コマンドを呼び出すのと同じです。
エラーが発生した場合、ShowError関数はユーザーフレンドリーなメッセージを表示します。この関数には2つの引数が必要です。
- · sText:表示するエラーメッセージのテキスト
- · sProcName : エラーが発生したプロシージャまたは関数の名前
ShowError は、 sTextとsProcNameによって提供されるエラー番号と情報を含むメッセージ ボックスを表示します。
この記事では、APIツールを使用してアプリケーションを起動、ステータスを確認、終了する簡単な方法を紹介しました。これにより、アプリケーションが実行中かどうかを判断できるようになります。この記事のコードはここから入手できます。