2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
無料ブログはココログ

« Explorer.exeを起こして、そのエクスプローラのオブジェクトを正確に捕捉する。(VBA編)(その2) | トップページ | テキストを正規表現で置換する。 »

2007年10月15日 (月)

Explorer.exeを起こして、そのエクスプローラのオブジェクトを正確に捕捉する。(VBA編)(その3)

Shell.Windows()の中から、起動したエクスプローラのオブジェクトを正確に捕捉するのは、なかなか厄介です。
特に、エクスプローラのインスタンスは、デスクトップシェルのプロセスに同居するので、識別が困難です。
そこで、fso.GetTempName()のテンポラリの名前でフォルダを作って、エクスプローラでそのフォルダを開き、フォルダ名で識別します。

Dim fso As Object
Dim TempName As String
Dim Folder As Object
Dim Shell As Object
Dim ie As Object

Set fso = CreateObject("Scripting.FileSystemObject")
TempName = fso.GetTempName()
Set Folder = fso.GetSpecialFolder(2).SubFolders.Add(TempName)
Call VBA.Shell("Explorer.exe """ & Folder.Path & """", vbHide)
Set Shell = CreateObject("Shell.Application")
Do
  For Each ie In Shell.Windows()
    If ie.Visible Then
    ElseIf ie.LocationName = TempName Then
      Exit Do
    End If
  Next
  Application.Wait [NOW()+"0:00:00.1"]
Loop
ie.Navigate2 0
Do While ie.Busy Or ie.ReadyState <> 4
  Application.Wait [NOW()+"0:00:00.1"]
Loop
Folder.Delete
ie.Visible = True
MsgBox TempName

« Explorer.exeを起こして、そのエクスプローラのオブジェクトを正確に捕捉する。(VBA編)(その2) | トップページ | テキストを正規表現で置換する。 »