Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11631 / 13645 ツリー ←次へ | 前へ→

【15044】Shell関数で起動したファイルの終了 IceMan 04/6/14(月) 12:46 質問[未読]
【15048】Re:Shell関数で起動したファイルの終了 ちゃっぴ 04/6/14(月) 13:19 回答[未読]
【15049】Re:Shell関数で起動したファイルの終了 ichinose 04/6/14(月) 13:37 発言[未読]
【15058】Re:Shell関数で起動したファイルの終了 IceMan 04/6/14(月) 16:59 お礼[未読]

【15044】Shell関数で起動したファイルの終了
質問  IceMan  - 04/6/14(月) 12:46 -

引用なし
パスワード
   大変困っているのでどなたか
ご教授ください!

あるファイル(a.exe)をShell関数を使って
起動したんですが、そのファイルが
3秒後に自動的に終了していれば次の処理へ、
終了していない場合は、そのファイルを強制的にでも
終了させて次の処理へ進みたいのですが、
どうすればよいのでしょうか?
If文を使用して分岐を作ればいいと思うのですが、
終了しているかどうかの判別と
強制終了のさせ方がわかりません!

よろしくお願いします!!

【15048】Re:Shell関数で起動したファイルの終了
回答  ちゃっぴ  - 04/6/14(月) 13:19 -

引用なし
パスワード
   多分API使わないと無理ではないかと・・・

下のコードは、Shell関数の終了するまで待機させるものです。

GetExitCodeProcessでそのアプリケーションが終了しているか確認し、
終了していない場合、DoEvents関数でそのアプリケーションへ
CPU処理を戻してやっているものです。

強制終了もAPI使えば出来ますので、検索してみてください。

参考になるかと・・・

'API定義
Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long

Public Const PROCESS_QUERY_INFORMATION = &H400&

Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, _
lpExitCode As Long) As Long

Public Const STATUS_PENDING = &H103&
Public Const STILL_ACTIVE = STATUS_PENDING

Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long

'-------------------------------------------------------------------------
'[Shell関数が終了するまで待機]
'
'プロシジャー名   S_WaitProcess
'引数        lngProcessID  Shell関数の戻り値(プロセスID)
'-------------------------------------------------------------------------
Sub S_WaitProcess(lngProcessID As Long)
 
  Dim lngProcess As Long
  Dim lngExitCode As Long
  Dim rc As Long
  
  'プロセスIDからハンドルを取得
  lngProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 1, lngProcessID)
  Do
    '終了しているか確認
    rc = GetExitCodeProcess(lngProcess, lngExitCode)
    DoEvents   '処理を戻す
  Loop While lngExitCode = STILL_ACTIVE '終了するまでループ
  rc = CloseHandle(lngProcess) '後始末
End Sub

【15049】Re:Shell関数で起動したファイルの終了
発言  ichinose  - 04/6/14(月) 13:37 -

引用なし
パスワード
   ▼IceMan さん:
こんばんは。

>大変困っているのでどなたか
>ご教授ください!
>
>あるファイル(a.exe)をShell関数を使って
>起動したんですが、そのファイルが
>3秒後に自動的に終了していれば次の処理へ、
>終了していない場合は、そのファイルを強制的にでも
>終了させて次の処理へ進みたいのですが、
>どうすればよいのでしょうか?
>If文を使用して分岐を作ればいいと思うのですが、
>終了しているかどうかの判別と
>強制終了のさせ方がわかりません!
>
>よろしくお願いします!!
http://www.geocities.co.jp/SiliconValley/4805/vbtips/vbtips100.htm


'-------------------------------------------------------
' Shell使用
'-------------------------------------------------------
という箇所を使用してみてください。

【15058】Re:Shell関数で起動したファイルの終了
お礼  IceMan  - 04/6/14(月) 16:59 -

引用なし
パスワード
   ▼ちゃっぴ さん:
▼ichinose さん:
こんにちは。
大変参考になるものをありがとうございます。
なんかとても難しそうですが、
頑張ってチャレンジしてみたいと思います!
ありがとうございます!
やってみたらまた書き込ませてもらいますので
これからもよろしくお願いします!

11631 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free