Осторожно прекратить Explorer.exe - PullRequest
2 голосов
/ 14 июня 2011

Я много занимался поиском, но мне не удалось найти простой способ аккуратно завершить работу оболочки обозревателя в пакетном файле XP.

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

Я пытался использовать CMDOW "program manager" /cls, ноэто просто вызывает диалоговое окно «Завершение работы Windows» - иногда оно выключает компьютер, даже если вы нажали кнопку «Отмена».Поскольку при открытии диалогового окна «Завершение работы Windows» и нажатии «Отмена» при удерживании нажатой клавиши «Ctrl, Alt, Shift» проводник плавно умирает, я рассмотрел скрипт vbs с использованием sendkeys, но при отправке "%{F4}" предполагается, что рабочий столэто главное окно.Я подумал, что мог бы попытаться кодировать некоторые макросы HotKeyP - у него есть возможность вызывать диалоговое окно «Завершение работы Windows» - но как только открывается диалоговое окно «Завершение работы Windows», HotKeyP не может получить к нему доступ.

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

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Следующий текст командной строки завершит любой процесс EXPLORER.EXE, но не завершит работу компьютера.

taskkill /fi "imagename eq EXPLORER.EXE" /f /t

чтобы узнать больше о taskkill, используйте /? параметр.

0 голосов
/ 30 июня 2011

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

Как правило, есть три способа закрыть программу:

  1. TerminateProcess ()
    • Это заставляет ядро ​​перестать планировать потоки процесса и выгружает процесс из памяти. Как вы правильно заметили, это не дает исследователю шанс сохранить свои настройки.
    • Это то, что делает "taskkill / f".
  2. Отправить сообщение WM_CLOSE в главное окно программы
    • Программы могут решить обработать это так, как они хотят. Большинство закроется, но Explorer воспринимает это как сигнал для выхода из системы, а это не то, что вам нужно.
  3. Используйте какой-нибудь программно-зависимый метод, чтобы попросить его завершить работу.
    • Explorer.exe обеспечивает это через графический интерфейс (ctrl + shift + щелчок правой кнопкой мыши по любой части меню, не относящейся к кнопкам), но он не обеспечивает способ командной строки для этого.

Если вы действительно настроены на то, что хотите сделать, вы можете использовать wscript или другую библиотеку сценариев пользовательского интерфейса, чтобы манипулировать GUI и выполнять опцию 3.

...