VB6.0でSHELL関数の実行終了を待つ方法 | ミニミニ管理者(システム管理者/社内SE/CIO)の独り言

[ ミニミニ管理者の独り言プログラム開発(VB6) > VB6.0でSHELL関数の実行終了を待つ方法 ]
スポンサードリンク

VB6.0でSHELL関数の実行終了を待つ方法

私は、VB6.0でSHELL関数をよく利用しますが、SHELL関数の問題点(?)としては「他の実行モジュールを起動するだけ」ですので、その後の処理は「実行モジュールまかせ」ということです。これが原因で、実行モジュールの処理が「失敗」したり、「応答時間がかかってタイムアウト」していても「一向にお構いなし」状態で、次々にコマンドを実行していきます。

そのため、SHELL関数を立て続けに実行させると「処理が実行されなかったり」「途中の処理が抜けていたり」することがあるのもこのためです。

この状況を回避する方法として「SHELL関数の実行終了を待ってから次の処理に進む」様にする方法があります。

◆サンプルプログラム
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
'WindowsAPIを宣言する
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Const SYNCHRONIZE = &H100000
Private Const INFINITE = &HFFFF

'SHELL関数の実行終了を待つ処理(モジュール)
Public Function Exec(pathname As String,windowstyle As Variant)
Dim IDProcess As Long
Dim hProcess As Long
Dim Ret As Long

  IDProcess = Shell(pathname, windowstyle)
  hProcess = OpenProcess(SYNCHRONIZE, 1, IDProcess)
  Ret = WaitForSingleObject(hProcess, INFINITE)
  Ret = CloseHandle(hProcess)

End Function
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

使用方法はSHELL関数と同じで、他のオブジェクト(フォームやコマンドボタン)などから「Execモジュール」を呼び出して、「pathname」のところでコマンドラインを指定して、「windowstyle」のところで引数を指定します。

◆検証環境
・Windows2000Pro
Visual Basic 6.0

システム管理者必見!DOSの活用事例

◆VisualBasic6.0 バックナンバー◆
VB6.0でコンソールアプリケーションを作る!
 VB6.0でコンソールアプリケーション(フォームの無いプログラム)を作成する方法を解説しています。
VB6.0でコマンドプロンプトのコマンドを実行する(SHELL関数)
 VB6.0の「SHELL関数」の使い方について解説しています。
VB6.0でSHELL関数の実行終了を待つ方法
 VB6.0でSHELL関数を使用した時に発生する処理モレの解決するサンプルプログラムです。



               最新記事へ     トップページ


スポンサードリンク


■Blog Ranking■
1. ←←サーバー構築・運用ブログあり お奨め:★★★★★
2. (ブログランキング ドット ネット)
3.にほんブログ村 IT技術ブログへにほんブログ村
4.BS blog Ranking
ブログランキングに挑戦中です。あなたもブログランキングに挑戦してみよう!
サーバー構築・運用ブログなんかもありますのでシステム管理者の方にもお奨めのサイトがあり!
ソニーストア
ボーズ・インイヤーヘッドホン

コメント
コメント投稿フォーム:
 上の情報を次回も利用する

トラックバック
トラックバックURL:
※ クリックで選択できます。
トラックバック一覧: