お世話になります。
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
そんな難しいことしなくても、
ret=CreateObject("WScript.Shell").Run("〜〜〜",1,True)
が簡単なのに。。。
スクリプトプログラマ様、お世話になります。
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 "メモ帳は終了しました。"」の命令はでてきません。
宜しくお願いします。
簡単なのは、
explorer.exe /separate,/root,〜
ですね。
難しいのは、ShellWindowsで捕捉するやり方です。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200712/07120001.txt
スクリプトプログラマ様、お世話になります。
ret = CreateObject("WScript.Shell").Run("C:\WINDOWS\Explorer.exe /separate,/root," & 共有フォルダ & " ", 1, True)でうまく動作しました。ウィルスチェックのソフトから警告がでるのを防ぐ方法が「ShellWindowsで捕捉するやり方」なのでしょうか?
宜しくお願いします。
そのソフトはWScript.ShellのRunを監視してるようなので、
こちらを使わず、ShellやAPIを使えば警告は出ないでしょう。
スクリプトプログラマ様、ありがとうございました。
編集 削除