tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
Shell関数等で起動したアプリが表示されるまで待つ(VB6.0) ( No.0 )  [親スレッドへ]
日時: 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



 [スレッド一覧へ] [親スレッドへ]