Я использую следующий код для выбора файла в окне Windows Explorer:

Set objShellAPP = CreateObject("Shell.Application")
objShellAPP.Open(WScript.Arguments(0))
WScript.Sleep(300)

On Error Resume Next        ' For new unsaved files.
With objShellAPP.Windows(objShellAPP.Windows.Count - 1).document
.SelectItem .Folder.Items.Item(WScript.Arguments(1)), 29
End With

Set objShellAPP = Nothing

objShellAPP.Open() открывает папку в последнем активном окне;

objShellAPP.Windows.Count - 1 не обязательно это окно.

Как я могу получить последнее активное окно для строки With objShellAPP.Windows(---).document ?

Спасибо.


Увидеть:

Откройте и выберите файл в существующем окне проводника

VBS: выберите один файл в папке

1 ответ1

0

В следующем коде первое окно Windows Explorer активируется, а затем там открывается папка (я использую QTTabbar).

Set objShellApp = CreateObject("Shell.Application")
Dim winFolder
For Each wFolder In objShellApp.Windows
On Error Resume Next
isFolder = wFolder.document.folder  ' An IE window does not support ".document.folder". We get the first Windows Explorer window.
If Err = 0 Then
wFolder.Visible = True
Set winFolder = wFolder
Exit For
End If
Next

objShellApp.Open(WScript.Arguments(0))
WScript.Sleep(300)

If NOT WScript.Arguments(1) = "" Then
If winFolder = Empty Then
Set winFolder = objShellApp.Windows(objShellApp.Windows.Count - 1)      ' A Windows Explorer window opened with objShellApp.Open(WScript.Arguments(0)) is the last one in the index (Count - 1).
End If

On Error Resume Next        ' For new unsaved files.
With winFolder.document
.SelectItem .Folder.Items.Item(WScript.Arguments(1)), 29
End With
End If

Set winFolder = Nothing
Set objShellApp = Nothing

Что касается лучшего способа различить Windows-Explorer и Internet-Explorer:

VBS: различение между Windows-Explorer и Internet-Explorer

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .