Shell関数で起動したExplorerの終了を認識するには

解決


まとや  2007-12-08 11:23:47  No: 138346  IP: 192.*.*.*

お世話になります。
Shell関数で起動したExplorerの終了を認識したいのです。
下記のサムプルを使用したのですが、     dwProcessID = Shell("C:\WINDOWS\NOTEPAD.EXE", 1)のshellの中を("Explorer.exe /root,\\サーバー名\共有フォルダ名", 1)とすると終了を認識してくれません。何か方法はあるのでしょうか。宜しくお願いします。

 Public Declare Function GetExitCodeProcess Lib "kernel32" _
      (ByVal hProcess As Long, lpExitCode As Long) As Long
  Public 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

  Sub TaskEnd()
      Dim dwProcessID As Long
      Dim hProcess As Long
      Dim lpdwExitCode As Long
      Dim ret As Long
      dwProcessID = Shell("C:\WINDOWS\NOTEPAD.EXE", 1)
      hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, True, dwProcessID)
      Do
        ret = GetExitCodeProcess(hProcess, lpdwExitCode)
        DoEvents
      Loop While lpdwExitCode
      MsgBox "メモ帳は終了しました。"
  End Sub

編集 削除
スクリプトプログラマ  2007-12-08 15:56:40  No: 138347  IP: 192.*.*.*

そんな難しいことしなくても、
ret=CreateObject("WScript.Shell").Run("〜〜〜",1,True)
が簡単なのに。。。

編集 削除
まとや  2007-12-08 19:11:26  No: 138348  IP: 192.*.*.*

スクリプトプログラマ様、お世話になります。
ret=CreateObject("WScript.Shell").Run("〜〜〜",1,True)の使い方がよく分かりませんので、〜〜〜の部分を"Explorer.exe /root,\\サーバー名\共有フォルダ名"にしてやってみましたが、ウィルスチェックのソフトから「警告、疑わしいスクリプトの活動、スクリプトはシステムに変更を加えようとしています。どのように対処しますか?」とでます。すべて許可を選択しましたが、状態は変わりませんでした。
私の説明不足があると思いますので補足します。
サムプルではNOTEPADが立ち上がりますが、「MsgBox "メモ帳は終了しました。"」の命令はNOTEPADを閉じるまで動きません。shellの中を("Explorer.exe /root,c:", 1)としてExplorerの対象を自身のパソコンの「c:」にしますと、Explorerの裏で「メモ帳は終了しました」とでていて、Explorerに終了を待たずに次のステップに進んでいます。shellの中を("Explorer.exe /root,\\サーバー名\共有フォルダ名", 1)としてExplorerの対象をサーバーの共有フォルダとしますと、Explorerはきちんと動きますが、その裏には何もでていないだけではなく、Explorerを閉じても「MsgBox "メモ帳は終了しました。"」の命令はでてきません。
宜しくお願いします。

編集 削除
スクリプトプログラマ  2007-12-08 20:19:51  No: 138349  IP: 192.*.*.*

簡単なのは、
explorer.exe /separate,/root,〜
ですね。

難しいのは、ShellWindowsで捕捉するやり方です。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200712/07120001.txt

編集 削除
まとや  2007-12-08 21:18:49  No: 138350  IP: 192.*.*.*

スクリプトプログラマ様、お世話になります。
  ret = CreateObject("WScript.Shell").Run("C:\WINDOWS\Explorer.exe /separate,/root," & 共有フォルダ & " ", 1, True)でうまく動作しました。ウィルスチェックのソフトから警告がでるのを防ぐ方法が「ShellWindowsで捕捉するやり方」なのでしょうか?
宜しくお願いします。

編集 削除
スクリプトプログラマ  2007-12-09 00:40:13  No: 138351  IP: 192.*.*.*

そのソフトはWScript.ShellのRunを監視してるようなので、
こちらを使わず、ShellやAPIを使えば警告は出ないでしょう。

編集 削除
まとや  2007-12-09 16:12:39  No: 138352  IP: 192.*.*.*

スクリプトプログラマ様、ありがとうございました。

編集 削除