6

私は現在、Windows の[スタート] -> [ファイル名を指定して実行] ダイアログに表示される、以前に実行したコマンドのリストをすぐにクリアするプログラムに取り組んでいます。HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRUキーを削除してこのリストをクリアする手順は、十分に文書化されています。ただし、これらの変更を有効にする前に、次のいずれかを行う必要があるようです。

  1. コンピュータを再起動します
  2. [スタート] -> [シャットダウン] を選択し、[キャンセル]を選択します。

これらはどちらも、私が達成しようとしているタスクには理想的ではありません: #1 はユーザーにとって非常に破壊的であり、#2 は追加のユーザー操作を必要とするように見えます。

ユーザーの他のアクティビティの中断を最小限に抑えながら、ユーザーの操作を必要とせずにこの情報をすぐに (そしてプログラムで) 強制的にリロードする方法を知っている人はいますか? プログラムを実行した直後にユーザーの実行履歴を消去したいのですが、ユーザー側でそれ以上のアクション (上記 #2 の「シャットダウン」->「キャンセル」トリックを使用するなど) や強制的な再起動を必要とせに。 .

または、別の角度から問題にアプローチするには: [スタート] -> [シャットダウン] -> [キャンセル] をクリックすると、Windows エクスプローラーは RunMUI キーを再読み込みします。 ユーザーがShut Downを選択してからCancelを選択せず​​に、同様のリロードを強制する方法はありますか?

私がすでに試したこと:

  • [Shutdown]を選択して [ Cancel ] を選択しているときに、 procmonを使用して explorer.exe の状態を監視します。Explorer が RunMRU キーに書き込みを行っているのを確認しましたが、これをトリガーする原因を特定できませんでした。
  • 「再起動せずにrunmruをリロード」という行に沿った多数のGoogle検索。ほとんどの結果は依然として上記の方法 1 を推奨していますが、いくつかの結果では 2 番目の方法を推奨しています。
  • 限定的な MSDN API 試験。RegFlushKey呼び出しは有望に見えますが、これまで使用したことがないため、さまざまなプロセスによってキャッシュされたレジストリ情報に適用されるかどうかはわかりません。

提案やその他の情報をいただければ幸いです。

4

7 に答える 7

1

あなたはccleanerを試しましたか?

http://www.ccleaner.com/

于 2009-05-09T05:47:16.503 に答える
0

Windows XP

  1. タスクバーを右クリック
  2. プロパティ メニュー オプション
  3. スタートメニュータブ
  4. カスタマイズボタン
  5. プログラムペイン
  6. 明確なリスト
  7. [OK] をクリックします。

これにより、explorer.exe タスクバー プロセスを更新し、リストをクリアする Windows API 関数が呼び出されます (レジストリの編集は不要です)。

于 2009-01-26T15:25:00.487 に答える
0

F5 キーが機能しない場合でも、実際に機能する例を見たことがありますか? これを試してみてください。ctrl>alt>delete の順に選択してから、タスク マネージャーに移動し、プロセス タブ...end explorer.exe を選択します。次に、file new task をクリックして、explorer.exe と入力し、チェックします...動作しますか?

于 2008-10-02T02:51:49.657 に答える
0

あなたの質問に対する完全な回答ではありませんが、PC Mag のこの記事から、実行コマンドのクリアをトリガーする 3 つ目の方法を見つけました。

explorer.exe を強制終了してから再起動すると、レジストリの変更後に実行リストもクリアされます。

于 2008-10-01T06:23:28.550 に答える
0

私の知る限り、スタート メニュー/タスクバー/デスクトップをホストする explorer.exe プロセスを閉じて再度開くことに依存しています。私が知っているこれを行うための「クリーンな」方法はありません。

ユーザーの操作なしでこれを行う必要がある場合は、すべてのexplorer.exeプロセスを閉じて、1 つを再起動する必要があります。

これを行うための初歩的な C# プログラムを次に示します。

  using System.Diagnostics;

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

  Process.Start("explorer.exe");

これにより、開いているすべての「Windows Explorer」ウィンドウが閉じられ、その後、追加の「Windows Explorer」が開く場合と開かない場合があることに注意してください。

Windows XP 32bit でテストしたところ、実行コマンド キャッシュが実際にクリアされました。

于 2010-10-01T20:55:57.590 に答える
0

私はあなたのために厄介なハックを持っています。ウィンドウをプログラムで表示し、すぐに (プログラムで) 非表示にして、[キャンセル] をクリックします (ご想像のとおり、プログラムで)。

アイコン キャッシュ フラッシュ API やその他の API を探してみてください。探しているような副作用があったとしても、私はあまり驚かないでしょう。

于 2008-10-01T10:32:51.913 に答える
-4

HKEY_CURRENT_USER\ Software\ Microsoft\ Windows\ CurrentVersion\ Explorer\ RunMRU\

于 2008-10-01T06:38:16.173 に答える