- 日時: 2008/10/10 15:38
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[他のアプリ関係][][] * * キーワード:Shell関数,待機処理,表示されるまで待つ,WaitForInputIdle API,処理待ち * *********************************************************************************** タイトル : sleep関数の待機について 記 事 No : 13030 投 稿 日 : 2008/09/10(Wed) 09:07 元質問者 : 悩める子羊
そこで、一番の解決策としてshell関数を使ってCADを起動させて 起動し終わるまで待機して次の動作に行くにはどうすればいいでしょうか? 今は、sleep関数で時間(秒)を調整しています。
----------------------------------------------------------------------------------- 記事No : 13031 投稿日 : 2008/09/10(Wed) 10:52 回答者 : 魔界の仮面弁士 ----------------------------------------------------------------------------------- > そこで、一番の解決策としてshell関数を使ってCADを起動させて > 起動し終わるまで待機して次の動作に行くにはどうすればいいでしょうか?
WaitForInputIdle API で。
http://hanatyan.sakura.ne.jp/logbbs/wforum.cgi?mode=allread&no=8150&page=330 http://jeanne.wankuma.com/tips/vb6/process/waitforinputidle.html
----------------------------------------------------------------------------------- 記事No : 13033 投稿日 : 2008/09/10(Wed) 18:24 回答者 : 花ちゃん ----------------------------------------------------------------------------------- そのまま使用すればよかったはずですが。 下記を貼り付けて、CAD のパスだけ書き換えて試して見て下さい。
Option Explicit
Private Declare Function OpenProcess Lib "kernel32" _ (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Boolean, _ ByVal dwProcessId As Long) As Long Private Declare Function CloseHandle Lib "kernel32" _ (ByVal hObject As Long) As Long Private Declare Function WaitForInputIdle Lib "user32" _ (ByVal hProcess As Long, ByVal dwMilliseconds As Long) As Long Private Const SYNCHRONIZE As Long = &H100000
Private Sub Command1_Click() Dim TaskID As Long Dim hProcess As Long Dim Ret As Long TaskID = Shell("C:\Program Files\CAD\***.exe", vbMaximizedFocus) hProcess = OpenProcess(SYNCHRONIZE, False, TaskID) If hProcess = 0 Then MsgBox "ハンドルが取得できません" Exit Sub End If Ret = WaitForInputIdle(hProcess, &HFFFF) Call CloseHandle(hProcess) MsgBox "表示しました" End Sub
|