VB6・VBA関数メモ:Shell関数

Shell関数についてメモしておきます。

この関数は外部アプリケーションを起動する際に使用します。
プログラムが実行するとタスクIDが返ってきます。

非同期で起動させるため、アプリケーション終了まで待機しません。
(AppActivateステートメントと組み合わせれば無理矢理待機させることはできます)

vbHideで起動した場合は、画面もタスクバーも表示がされませんが裏ではちゃんと起動しています。
(タスクマネージャーで確認するとプロセスが存在しています)


概要

Shell(PathName, [WindowStyle As VbAppWinStyle = vbMinimizedFocus]) As Double
機能 外部アプリケーションを非同期で起動
引数 PathName 外部アプリケーションのパス (String型)
WindowStyle 外部アプリケーションのウィンドウ形式
(省略時はvbMinimizedFocus)
VbAppWinStyle型
戻り値 アプリケーションのタスクID
※異常時は0
Double型


VbAppWinStyle型

定数名 説明
vbHide 0 フォーカスを持ち、非表示
vbNormalFocus 1 フォーカスを持ち、元のサイズと位置を復元
vbMinimizedFocus 2 フォーカスを持ち、最小化表示
vbMaximizedFocus 3 フォーカスを持ち、最大化表示
vbNormalNoFocus 4 フォーカスを持たず、前回のサイズと位置を復元
vbMinimizedNoFocus 6 フォーカスを持たず、最小化表示


使用例

説明 記述例 出力
外部アプリケーションを起動
(例ではメモ帳を起動)
Dim path   As String
Dim taskID As Double

path = "C:¥Windows¥System32¥notepad.exe"
taskID = Shell(path)

Debug.Print taskID
 5828 
外部アプリケーションを起動
(例ではメモ帳を最大化の状態で起動)
Dim path   As String
Dim taskID As Double

path = "C:¥Windows¥System32¥notepad.exe"
taskID = Shell(path, vbMaximizedFocus)

Debug.Print taskID
 5828 


応用例

説明 記述例 出力
アプリケーションが終了するまで待機
(AppActivateステートメントでエラーになったら終了されたと判断)
Dim path   As String
Dim taskID As Double

path = "C:¥Windows¥System32¥notepad.exe"
taskID = Shell(path, vbNormalFocus)

On Error Resume Next

Do
    DoEvents
    Call AppActivate(taskID)
Loop While Err = 0

Err.Clear

Debug.Print "アプリケーション終了"
アプリケーション終了


動作検証

説明 記述例 出力
指定ファイルが存在しない場合はエラー
On Error GoTo ERR_HANDLER

    Dim taskID As Double
    
    taskID = Shell("NoExists")
    
    Debug.Print taskID

ERR_HANDLER:

    If Err > 0 Then Debug.Print Error
ファイルが見つかりません。


コメント
コメントする








    
この記事のトラックバックURL
トラックバック