Close all open explorer windows

Close open Explorer windows without terminating explorer.exe

I’ve tried searching but nothing really matches my demand.

I don’t want explorer.exe to be terminated or restarted. I just want any open explorer windows to close.

4 Answers 4

edit:
so i guess the only interesting thing is the callback which will be called by windows for each enumerated window (handle of said window in hwnd)

GetWindowThreadProcessId provides us with the processid for a given window handle

GetProcessById then provides us with a process object to read things like the process name from

RealGetWindowClass provides us with the registered class name for a given window handle

finally we can look to see if the process for the current window is the explorer and if the window class is «CabinetWClass», which is the window class for the normal file explorer window

last but not least, if our check is ok, send a WM_CLOSE message to kindly ask the window to close itself.

The following alternative uses the COM API of the Shell object to retrieve and identify File Explorer windows. It requires the addition of the COM references to:

  • Microsoft Shell Controls And Automation
  • Microsoft Internet Controls

The object returned by Shell.Windows method is an IEnumerable. Each object in the collection is a SHDocVw.InternetExplorer instance. If the Document object is a Shell32.ShellFolderView, then the explorer is a File Explorer.

By default, explorer runs as single process, and any windows that open are just a thread of the process.
Normally, to close a program, you’d send a close message to the process. In this case, closing explorer.exe will close all explorer windows.

To close individual windows, you’d open each window via it’s own process. This can be done via registry setting or enabling under View->Options->View->Advanced Settings: «Launch . separate process»

a) Find PID (process ID) of window you wanna close.

via taskmanager:
1. In list of processes, click the arrow to the left of «Windows Explorer»
2. Check the window name matches the window you wanna close
3. Right click on «Windows Explorer», click «Go to Details»
4. Record the pid

via CMD:
tasklist /V /FI «IMAGENAME eq explorer.exe»

If each explorer window is open in it’s own process, the above command would display the window title in the last column.
Otherwise «N/A» would be displayed.

The pid of all explorer windows would be the same. Explorer.exe processes have their own pid, and title «N/A»
If ‘separate process’ has been enabled eg. via Folder View option, then each window can be closed via the process id & filter option of taskkill.

To close, the desired window has to be activated first, otherwise closing with pid will close the last active window, or closing with window title filter will give error:

INFO: No tasks running with the specified criteria.

will close the last active window.
Repeating this command will the next window.

or taskkill /im explorer.exe /fi «windowtitle eq »
or taskkill /fi «IMAGENAME eq explorer.exe» /fi «windowtitle eq «

is not case sensitive
If full path in title bar has been enabled in Folder view, then include full path or wildcards.

If you are having issues where File Explorer Opens and then immediately closes in Windows 10 it may be due to a problem with Quick Access.

Symptoms

You open file explorer from the task bar or start menu in Windows 10. File Explorer opens and immediately closes. Right clicking on the file explorer icon in the task bar and choosing a folder directly such as the Desktop opens File Explorer normally and doesn’t crash.

Читайте также:  Два монитора windows 10 выбрать основной

Resolution

If Windows 10 is up to date the easies solution is to Disable Quick Access in Windows 10 and change it to open up to My PC by default.

Step 1

Right Click on the File Explorer Icon in the task bar

Step 2

Choose a Pinned folder such as Desktop

Step 3

Whilst file explorer is open select View from the top ribbon and then click on Options, Change folder and search options

Step 4

As shown above change Open File Explorer to: This PC. At the same time it is also a good idea to select Clear File Explorer History under the Privacy pane.

Step 5

Step 6

Open File Explorer normally and check if the issue has been resolved

Close all open explorer windows

Вопрос

How can i get a Windows Explorer window to close with VBscript? I have searched and all i am finding is how to close an IE window.
I am using a script to install some applications. One of them is the MS SMS console. Once the install has completed, it opens a Windows Explorer window to C:\Documents and Settings\All Users\Start Menu\Programs\SMS Console.
I want the script to close this. One other issue, i am using a IE Progress abr at the same time, and i do not want that to get closed.

Any assistance would be appreciated.

Ответы

Here is a way that might work for you .

Function CloseExplorerWindow(sFolderPath)
Dim bTest

bTest = false
with createobject(«shell.application»)
for each wndw in .windows
if typename(wndw.document) = «IShellFolderViewDual2» then
if lcase(wndw.document.folder.self.path) = lcase(sFolderPath) then
on error resume next
wndw.quit
bTest = err.number = 0
on error goto 0
end if
end if
next
end with ‘ shell.application
CloseExplorerWindow = Cstr(bTest)

The function returns true if it found and closed the window and false otherwise.
Tom Lavedas

Все ответы

Here is a way that might work for you .

Function CloseExplorerWindow(sFolderPath)
Dim bTest

bTest = false
with createobject(«shell.application»)
for each wndw in .windows
if typename(wndw.document) = «IShellFolderViewDual2» then
if lcase(wndw.document.folder.self.path) = lcase(sFolderPath) then
on error resume next
wndw.quit
bTest = err.number = 0
on error goto 0
end if
end if
next
end with ‘ shell.application
CloseExplorerWindow = Cstr(bTest)

The function returns true if it found and closed the window and false otherwise.
Tom Lavedas

I have a script that open up a specific IE web address, and after some amount of time I want to close.

I have the timeing and everything, but the .close option does not work.

This is the error using .close:

C:\scripts\Social_Engineering\User_Verification.vbs(339, 4) Microsoft VBScript runtime error: Object doesn’t support this property or method: ‘Close’

Exit code: 0 , 0000h

Here is a portion of my script:

‘enter link to console
Set Shell_OpenConsole = WScript.CreateObject(«WScript.Shell»)

StartHour = Hour(intOpenConsoleTime)
StartMin = Minute(intOpenConsoleTime)
StartSec = Second(intOpenConsoleTime)

CurrentHour = Hour(intOpenConsoleTime)
CurrentMin = Minute(intOpenConsoleTime)
CurrentSec = Second(intOpenConsoleTime)

EndHour = Hour(intOpenConsoleTime)
EndMin = Minute(intOpenConsoleTime)
‘ End time setting is after 1 min
‘ EndMin = EndMin+1
EndSec = Second(intOpenConsoleTime)
‘ End time setting is after 1 sec (for testing only)
EndSec = EndSec +1

intTimeTracker = (StartSec+(StartMin *60)+((StartHour *60)*60))
intCloseConsoleTime = (EndSec+(EndMin *60)+((EndHour *60)*60))

Ограничения window.close()

Порой веб-разработчики с удивлением обнаруживают, что команда windows.close() не всегда закрывает окно браузера. А в консоли инструментов разработчика браузера при этом выводится сообщение, указывающее на то, что скрипты могут закрывать только окна, которые ими же и открыты:

Почему браузеры ограничивают команду close()?

Прежде чем мы перейдём к разговору о том, какие факторы влияют на поведение браузера при вызове close() , важно сначала разобраться с тем, почему вообще существуют ограничения, применяемые при выполнении этой команды.

Иногда такое поведение браузеров объясняют, ссылаясь на некие таинственные «соображения безопасности». Но основная причина ограничений, применяемых к close() , больше связана с тем, что называют «пользовательский опыт». А именно, если скрипты смогут свободно закрывать любые вкладки браузеров, пользователь может потерять важные данные, состояние веб-приложения, работающего во вкладке. Это, кроме того, если вкладка или окно браузера неожиданно закрывается, может привести к нарушению механизмов перемещения по истории посещения страниц. Такие перемещения выполняются браузерными кнопками Вперёд и Назад (в Internet Explorer мы называли этот механизм TravelLog ). Предположим, пользователь применяет вкладку браузера для исследования результатов поиска. Если одна из изучаемых им страниц сможет закрыть вкладку, хранящую стек навигации, историю посещённых страниц, среди которых — страница с результатами поиска, это будет довольно-таки неприятно.

Читайте также:  Список приложений windows 10 для удаления

Кое-что тут, конечно, имеет отношение и к безопасности, и к защите пользователей браузеров от мошенников. Например, если браузерные вкладки могли бы свободно сами себя закрывать — это могло бы найти применение на вредоносных страницах, пугающих пользователей, или в каких-нибудь мошеннических схемах.

Что написано в стандартах?

Вот что об этом всём говорится в разделе dom-window-close стандарта HTML:

Контекст просмотра может закрываться скриптами в том случае, если это вспомогательный контекст, созданный скриптом (в отличие от контекста, созданного в результате действий пользователя ), или если это контекст верхнего уровня, история сессий которого содержит только один Document.

Тут, вроде бы, всё достаточно просто и понятно, хотя те части текста, которые я выделил, скрывают в себе много сложностей и тонкостей. (Совершенно закономерным можно счесть такой вопрос: «Что делать, если скрипт был запущен в ответ на действия пользователя?».)

Как поступают браузеры?

К нашему сожалению, у каждого браузера имеется собственный набор моделей поведения, связанный с window.close() (можете поэкспериментировать с этой тестовой страницей). Отчасти это так из-за того, что большинство этих моделей поведения было реализовано до появления соответствующего стандарта.

▍Internet Explorer

В Internet Explorer вкладка или окно браузера закрывается без лишних вопросов в том случае, если для создания этой вкладки или этого окна была использована команда window.open() . Браузер не пытается удостовериться в том, что история посещений страниц вкладки содержит лишь один документ. Даже если у вкладки будет большой TravelLog , она, если открыта скриптом, просто закроется. (IE, кроме того, позволяет HTA-документам закрывать самих себя без каких-либо ограничений).

Во всех других случаях вкладку (или окно) просто так не закрыть: пользователю показывают одно или два модальных окна, что зависит от того, представлена ли страница единственной вкладкой в окне браузера.

Окна для подтверждения закрытия вкладки или окна

▍Chromium (Microsoft Edge, Google Chrome и другие браузеры)

В Chromium 88 команда window.close() выполняется успешно в том случае, если у нового окна или у новой вкладки что-то записано в свойство opener, или в том случае, если стек навигации страницы содержит менее двух записей .

Как видите, тут наблюдается небольшое отличие того, что требует спецификация, от того, что реализовано в браузере.

Во-первых — обратите внимание на то, что я упомянул свойство opener , а не сказал о том, что «страница была создана скриптом». Вспомним о том, что свойство opener позволяет всплывающему окну обращаться к создавшей его вкладке.

  • Если пользователь создаёт новую вкладку, щёлкнув по соответствующей кнопке, воспользовавшись комбинацией клавиш Ctrl + T , щёлкнув по ссылке и нажав при этом Shift , открыв URL из командной оболочки, то у открытой в результате вкладки свойство opener установлено не будет.
  • А если вкладка была открыта с помощью команды open() или через гиперссылку с заданным атрибутом target (не _blank ), тогда, по умолчанию, в свойство opener записывается некое значение.
  • У любой ссылки может быть атрибут rel=opener или rel=noopener , указывающий на то, будет ли у новой вкладки установлено свойство opener .
  • При выполнении JavaScript-вызова open() можно, в строке windowFeatures , указать noopener , что приведёт к установке свойства opener новой вкладки в null .

Вышеприведённый список позволяет сделать вывод о том, что и обычный щелчок по ссылке, и использование JavaScript-команды open() может привести к созданию вкладки как с установленным, так и с неустановленным свойством opener . Это может вылиться в серьёзную путаницу: открытие ссылки с зажатой клавишей Shift может привести к открытию вкладки, которая не может сама себя закрыть. А обычный щелчок мыши по такой ссылке приводит к открытию вкладки, которая всегда может закрыть себя сама.

Во-вторых — обратите внимание на то, что в начале этого раздела я, говоря о стеке навигации, употребил слово «записи», а не «объекты Document». В большинстве случаев понятия «запись» и «объект Document» эквивалентны, но это — не одно и то же. Представьте себе ситуацию, когда в новой вкладке открывается HTML-документ, в верхней части которого содержится нечто вроде оглавления. Пользователь щёлкает по ToC-ссылке, ведущей к разделу страницы #Section3 , после чего браузер послушно прокручивает страницу к нужному разделу. Стек навигации теперь содержит две записи, каждая из которых указывает на один и тот же документ. В результате Chromium-браузер блокирует вызов window.close() , а делать этого ему не следует. Этот давний недостаток с выходом Chromium 88 стал заметнее, чем раньше, так как после этого ссылкам с атрибутом target , установленным в _blank , по умолчанию назначается атрибут rel=noopener .

Читайте также:  Vpn сервера под windows

В ветке трекера ошибок Chromium, посвящённой проблеме 1170131, можно видеть, как эту проблему пытаются решить путём подсчёта количества объектов Document в стеке навигации. Но сделать это непросто, так как в настоящее время у процесса, отвечающего за рендеринг страницы, в котором выполняется JavaScript-код, есть доступ только к количеству записей в стеке навигации, но не к их URL.

▍Chromium: пользовательский опыт

Когда браузер Chrome блокирует команду close() , он выводит в консоль следующее сообщение, которое мы уже обсуждали:

А пользователю, который в консоль обычно не смотрит, об этом никак не сообщается. Это может показаться странным тому, кто щёлкнул по кнопке или по ссылке, предназначенной для закрытия страницы. В недавно появившемся сообщении об ошибке 1170034 предлагается показывать пользователю в такой ситуации диалоговое окно, вроде того, что показывается в Internet Explorer. (Между прочим, это сообщение об ошибке задаёт новый стандарт подготовки подобных сообщений. В нём, в виде, напоминающем комикс, показано, как несчастный пользователь превращается в счастливого в том случае, если в Chromium будет реализован предлагаемый функционал.)

▍Chromium: любопытные факты об очень редкой ошибке

То, о чём пойдёт речь, представляет собой весьма хитрый сбой, «пограничный случай», возникающий лишь в особых ситуациях. Но я, в течение пяти лет, встречался с сообщениями о подобном сбое, касающимися и Chrome, и Edge.

Речь идёт о том, что если установить свойство Chromium On Startup (При запуске) в значение Continue where you left off (Восстановить вкладки предыдущего сеанса), перейти на страницу, которая пытается сама себя закрыть, а после этого закрыть окно браузера, то браузер потом, при каждом запуске, будет сам себя закрывать.

Попасть в такую ситуацию довольно сложно, но в Chrome/Edge 90 это вполне возможно.

Вот как воспроизвести эту ошибку. Посетите страницу https://webdbg.com/test/opener/. Щёлкните по ссылке Page that tries to close itself (Страница, которая пытается себя закрыть). Воспользуйтесь сочетанием клавиш Ctrl+Shift+Delete для очистки истории просмотра (стека навигации). Закройте браузер с помощью кнопки X . Теперь попробуйте запустить браузер. Он будет запускаться, а потом сам собой закрываться.

▍Safari/WebKit

Код WebKit похож на код Chromium (что неудивительно, учитывая их генеалогию). Исключением является лишь тот факт, что WebKit не уравнивает переходы по noopener-страницам с переходами, инициированными через интерфейс браузера. В результате пользователь, работая в Safari, может перемещаться по множеству страниц с одного сайта, а команда close() при этом будет работоспособна.

Если же вызов close() окажется заблокированным, то в JavaScript-консоль Safari (надёжно скрытую от посторонних глаз) будет выведено сообщение, указывающее на то, что окно закрыть нельзя из-за того, что оно создано не средствами JavaScript:

▍Firefox

В браузере Firefox, в отличие от Chromium, та часть спецификации HTML, в которой говорится о «только одном Document», реализована корректно. Firefox вызывает функцию IsOnlyTopLevelDocumentInSHistory() , а она вызывает функцию IsEmptyOrHasEntriesForSingleTopLevelPage() , которая проверяет историю сессий. Если там больше одной записи, она уточняет, относятся ли они все к одному и тому же объекту Document. Если это так — вызов close() выполняется.

Firefox даёт в наше распоряжение настройку about:config , называемую dom.allow_scripts_to_close_windows , позволяющую переопределить стандартное поведение системы.

Когда Firefox блокирует close() — он выводит в консоль сообщение о том, что скрипты не могут закрывать окна, которые были открыты не скриптами:

В трекере ошибок Firefox уже 18 лет лежит просьба о том, чтобы браузер показывал бы в подобной ситуации соответствующее окно, а не ограничивался бы выводом сообщения в консоль.

Итоги

Что тут скажешь? Возможно, дело в том, что браузеры — это жутко сложные создания.

Приходилось ли вам сталкиваться с проблемами, вызванными отличиями реализаций чего-либо в разных браузерах?

Оцените статью