Очистка истории диалога Windows «Выполнить» без перезагрузки - PullRequest
6 голосов
/ 25 сентября 2008

В настоящее время я работаю над программой, чтобы немедленно очистить список ранее выполненных команд, который появляется в диалоговом окне Windows Пуск -> Запуск . Процедура очистки этого списка путем удаления ключа HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ RunMRU хорошо документирована ; однако, прежде чем эти изменения вступят в силу, необходимо выполнить одно из следующих действий:

  1. Перезагрузите компьютер
  2. Выберите Пуск -> Выключите , а затем выберите Отмена .

Ни один из них не идеален для задачи, которую я пытаюсь выполнить: # 1 чрезвычайно разрушителен для пользователя, а # 2, кажется, требует дополнительного взаимодействия с пользователем.

Кто-нибудь знает, как немедленно (и программно) принудительно перезагрузить эту информацию, не требуя какого-либо взаимодействия с пользователем, , одновременно минимизируя нарушение других действий пользователя ? Я бы хотел, чтобы история выполнения пользователя очищалась сразу после выполнения моей программы, без , требующей каких-либо дальнейших действий с их стороны (например, с помощью трюка «Завершение работы» -> «Отмена»). в # 2 выше) или принудительная перезагрузка.

Или, чтобы подойти к проблеме под другим углом: при нажатии Пуск -> Завершение работы -> Отмена , проводник Windows перезагружает ключ RunMUI. Есть ли способ принудительно выполнить такую ​​же перезагрузку, если пользователь не выберет Завершение работы , а затем Отмена ?

Вещи, которые я уже пробовал:

  • Отслеживание состояния explorer.exe с помощью procmon при выборе Завершение работы и затем Отмена . Я вижу, что Проводник пишет в ключ RunMRU, но не смог определить, что вызывает это.
  • Многочисленные поиски Google в духе "перезагрузить runmru без перезагрузки". Большинство результатов по-прежнему рекомендуют метод № 1 выше, хотя некоторые предлагают № 2.
  • Ограниченная проверка MSDN API. Вызов RegFlushKey выглядит многообещающим, но я никогда не использовал его раньше, поэтому я не знаю, будет ли он применяться к информации реестра, кэшируемой различными процессами.

Любые предложения или другая информация будет принята с благодарностью.

Ответы [ 7 ]

1 голос
/ 09 мая 2009

Вы пробовали ccleaner?

http://www.ccleaner.com/

0 голосов
/ 02 октября 2010

Насколько я знаю, он опирается на процесс explorer.exe, в котором размещается и вновь открывается стартовое меню / панель задач / рабочий стол. Не существует «чистого» способа сделать это, о котором я знаю.

Если вам действительно нужно сделать это без взаимодействия с пользователем, вам нужно закрыть все explorer.exe процессы и перезапустить один.

Вот простая программа C # для этого;

  using System.Diagnostics;

  Process[] procs = Process.GetProcessesByName("explorer");
  foreach (Process proc in procs)
  {
    proc.Kill();
  }

  Process.Start("explorer.exe");

Обратите внимание, что это закроет все открытые окна "Проводника Windows" и впоследствии может открыть или не открыть дополнительный "Проводник Windows".

Я только что проверил это на Windows XP 32bit, и он действительно очистил кэш команд Run.

0 голосов
/ 26 января 2009

Windows XP

  1. Щелкните правой кнопкой мыши на панели задач
  2. Опция меню свойств
  3. Вкладка «Пуск»
  4. Кнопка настройки
  5. Панель программ
  6. Очистить список
  7. Нажмите ОК

Вызывает функцию Windows API, которая обновляет процесс панели задач explorere.exe, а также очищает список (нет необходимости в редактировании реестра).

0 голосов
/ 02 октября 2008

Я видел случаи, когда это действительно работает, даже клавиша F5 не работает? Попробуйте это, Ctrl> Alt> Delete, затем перейдите в диспетчер задач, вкладка процессов ... конец explorer.exe. Затем нажмите на файл новое задание и введите explorer.exe, затем проверьте ... это работает?

0 голосов
/ 01 октября 2008

У меня для тебя неприятный хак. Показать окно программно, сразу же скрыть его (программно) и нажать «Отмена» (ну, как вы уже догадались, программно).

Вы можете попробовать поискать API-интерфейс очистки кэша значков или другие, я бы не удивился, если бы у них были побочные эффекты, подобные тому, который вы ищете.

0 голосов
/ 01 октября 2008

HKEY_CURRENT_USER \ Программное обеспечение \ Microsoft \ Windows \ CurrentVersion \ Explorer \ RunMRU \

0 голосов
/ 01 октября 2008

Не полный ответ на ваш вопрос, но я нашел третий способ инициировать очистку команды запуска из этой статьи в PC Mag.

Уничтожение explorer.exe и его перезапуск также очистит список запуска после изменения реестра.

...