Вызов API Windows (8.1) для control-alt-shift + отмены с экрана выключения?

222
mpag

Explorer.exe обрушился на меня, не поставив систему полностью на колени. Это не первый раз, когда это произошло. По сути, я теряю панель запуска + панель задач + системный значок + значки рабочего стола и остаюсь сплошным темно-синим рабочим столом (без фонового изображения).

С помощью control-alt-delete я могу вызвать меню экрана блокировки (включая диспетчер задач). Используя комбинацию диспетчера задач, командных приглашений и Process Explorer MS sysinternals, я могу генерировать как стандартные пользовательские окна, так и окна с повышенными правами (подробности доступны при необходимости). Тем не менее, ни под моим стандартным логином, ни под учетной записью администратора с повышенными правами я не могу перезапустить проводник для восстановления рабочего стола. Запуск explorer.exe без каких-либо ключей, похоже, ничего не делает. Explorer.exe / n или / e (или любой другой задокументированный переключатель или запуск с « START»") дает мне окно браузера файлов, но не панель запуска + панель задач. Уничтожение и перезапуск этого explorer.exe также не восстанавливают функциональность. При щелчке правой кнопкой мыши на проводнике Windows (новом окне проводника файлов) в диспетчере задач и выборе« Перезапустить »удаляется из меню «Процессы» -> «Приложения» - «Процессы» -> «Процессы Windows» (без проводника открытого файла) и перезапуск оттуда изменяет его на «Процессы» -> «Фоновые процессы», из которого нет ни открытого проводника файлов, ни пункта меню «Перезагрузка».

Сочетания клавиш Windows, кажется, не работают, так как панель запуска не существует. Они не работают с запущенным окном проводника в фокусе. Alt-F4, в котором ничего не находится в фокусе или после нажатия на синем фоне, не вызывает меню / диалога. Alt-F4 из приложения все еще работает, чтобы закрыть это окно | приложения соответствующим образом. Сигналы увеличения и уменьшения громкости моих наушников также не интерпретируются независимо от того, что остается в системе (но я могу регулировать громкость с помощью ползунка для конкретного приложения).

Кажется, я не могу вызвать диалоговое окно завершения работы, как указано во втором разделе https://serverfault.com/questions/4464/hidden-commands-on-windows, так как я не могу использовать сочетания клавиш или панель запуска. Используя следующий код, вдохновленный этим и этим :

<!DOCTYPE html> <!-- saved from url=(0016)http://localhost --> <HTML> <HEAD> <TITLE>Start Page</TITLE>  <OBJECT ID="oShell" CLASSID="clsid:13709620-C279-11CE-A49E-444553540000"> </OBJECT>  <STYLE> INPUT  </STYLE>   <SCRIPT LANGUAGE="VBScript"> <!-- function fnStart(sMethod) dim objShell set objShell = CreateObject("shell.application") set objWscr = CreateObject("WScript.Shell") select case sMethod case 0  'Minimizes all windows on the desktop oshell.Shell_MinimizeAll case 1  'Displays the Run dialog box oshell.FileRun case 2  'Displays the Shut Down Windows dialog box 'neither oshell.Shell_Shutdown nor oshell.Shell_ShutdownWindows (supplied in MS docs) are recognized as valid functions of the oshell object. objShell.ShutdownWindows oshell.ShutdownWindows 'objWscr.Run "Rundll Shell32.dll,SHExitWindowsEx" ' returns "The system cannot find the file specified" error box. set objShell = nothing case 3  'Displays the Find dialog box oshell.Shell_FindFilesr case 4  'Displays the Date/Time dialog box oshell.Shell_SetTime  case 5  'Displays the Internet Properties dialog box oshell.Shell_ControlPanelItem "INETCPL.cpl" case 6  'Explores the My Documents folder oshell.Shell_Explore "C:\My Documents" case 7  'Enables user to select folder from Program Files oshell.Shell_BrowseForFolder 0, "My Programs", 0, "C:\Program Files"  case 8  'Opens the Favorites folder oshell.Shell_Open "C:\WINDOWS\Favorites" case 9  'Displays the Taskbar Properties dialog box oshell.Shell_TrayProperties end select  end function  --> </SCRIPT> <SCRIPT type="text/javascript" LANGUAGE="JavaScript"> function logout() { //code (new ActiveXObject("Shell.Application")).ShutdownWindows(); } logout(); </SCRIPT>  </HEAD>  <BODY> <H1>Start...</H1> <INPUT type="button" value="Edit Taskbar Properties" onclick="fnStart(9)"><br> <INPUT type="button" value="Open Favorites Folder" onclick="fnStart(8)"><br> <INPUT type="button" value="Browse Program Files" onclick="fnStart(7)"><br> <INPUT type="button" value="Explore My Documents" onclick="fnStart(6)"><br> <INPUT type="button" value="Modify Internet Properties" onclick="fnStart(5)"><br> <INPUT type="button" value="Set System Time" onclick="fnStart(4)"><br> <INPUT type="button" value="Find a File or Folder" onclick="fnStart(3)"><br> <INPUT type="button" value="Shut Down Windows" onclick="fnStart(2)"><br> <INPUT type="button" value="Run" onclick="fnStart(1)">  <INPUT type="button" value="Minimize All Windows" onclick="fnStart(0)">  </BODY> </HTML> 

Поскольку hta-файл (и нажатие на кнопку «Завершение работы») ничего не делает, но не выдает никаких ошибок. Как файл htm (l) в Internet Explorer он выдает ошибку «Отказано в доступе», независимо от настроек локальной зоны. Я пробовал несколько перестановок этого кода, в том числе: здесь, здесь

Control-Alt-Delete с последующим «переключением пользователя» и прямым входом в систему в качестве учетной записи администратора приводит к входу в чисто черный экран с курсором мыши. Control-Alt-Delete и переключение обратно на мою учетную запись без прав администратора возвращает мой сплошной темно-синий «рабочий стол» без значков (примерно через 0,1 с отображения сплошного светло-голубого | голубого | рабочего стола «рабочий стол»).

Мне интересно, есть ли CLSID или объект приложения, который может быть вызван для вызова того, что вызывается из control-alt-shift + cancel из диалога выключения? В качестве альтернативы, знаете ли вы каким-либо образом, как я могу убить системную службу, которая закрывает проводник, перезапустить службу, чтобы вернуть мне мой рабочий стол?

Я бы предпочел не выключать и не перезагружать компьютер, поскольку я по сути использую этот компьютер в качестве сервера и хочу, чтобы он работал как можно быстрее.

2
Вы пробовали запустить: `C: \ Windows \ system32 \ userinit.exe`, если перезапуск` explorer.exe` не приводит к хорошему поведению системы и влияет на другие учетные записи, я бы перезапустил окно, просто чтобы быть на безопасной стороне. Это не нормальное поведение. Я думаю, выход из системы (logoff.exe) и снова включить не помогает? Peter Hahndorf 6 лет назад 1
`userinit` был магией, в которой я нуждался. Это сработало. Благодарю. (отправь как ответ и я приму это). Я не пробовал выходить из системы, но я предполагал, что он не будет работать в качестве пользователя-переключателя, за которым следует вход в качестве администратора, выход из системы администратора не исправил это. mpag 6 лет назад 0
userinit снова спасает день :) mpag 6 лет назад 0

1 ответ на вопрос

2
Peter Hahndorf

Вы можете попробовать запустить C:\Windows\system32\userinit.exeкомпонент, который запускается при входе пользователя в систему (он запускает Explorer.exe в качестве оболочки Windows).

Не уверен, что не так с вашей системой, но userinit.exeнаходится на один уровень ниже Explorer.exe, так что это может помочь.

Похожие вопросы