WordやExcel等のOfficeアプリケーションでは、下記サイトにある通り、ファイルやフォルダの履歴がレジストリに記録されます。
Officeアプリケーションを使って人前でプレゼンをするとき等、履歴を表示したくない時に、いちいち手作業でレジストリを編集するのは面倒なので、所謂“最近使用したファイル”を一括で削除するスクリプトを書いてみました。
Option Explicit Dim app, v 'Officeのバージョン取得 On Error Resume Next Set app = CreateObject("Excel.Application") On Error GoTo 0 If IsEmpty(app) Then WScript.Echo "Officeアプリケーションのバージョンを取得できませんでした。" Wscript.Quit End If v = app.Version app.Quit Set app = Nothing ClearOfficeMRU "Software\Microsoft\Office\" & v & "\" WScript.Echo "処理が終了しました。" Private Sub ClearOfficeMRU(ByVal SubKeyName) '全Officeアプリケーションの「最近使用したファイル」を削除する Dim shell, reg Dim keys, key Dim subkeys, subkey Dim names, types Dim i Const HKEY_CURRENT_USER = &H80000001 Set shell = CreateObject("WScript.Shell") Set reg = CreateObject("WbemScripting.SWbemLocator") _ .ConnectServer(, "root\default").Get("StdRegProv") reg.EnumKey HKEY_CURRENT_USER, SubKeyName, keys If Not IsNull(keys) Then For Each key In keys Select Case LCase(key) Case "file mru", "place mru", "user mru" reg.EnumValues HKEY_CURRENT_USER, SubKeyName & key, names, types If Not IsNull(names) Then If UBound(names) > 1 Then For i = LBound(names) To UBound(names) If InStr(LCase(names(i)), "metadata") < 1 Then If InStr(LCase(names(i)), "item") > 0 Then 'WScript.Echo shell.RegRead("HKEY_CURRENT_USER\" & SubKeyName & key & "\" & names(i)) '確認用 shell.RegDelete "HKEY_CURRENT_USER\" & SubKeyName & key & "\" & names(i) End If End If Next Else reg.EnumKey HKEY_CURRENT_USER, SubKeyName & key, subkeys If Not IsNull(subkeys) Then For Each subkey In subkeys ClearOfficeMRU SubKeyName & key & "\" & subkey & "\" Next End If End If End If Case Else ClearOfficeMRU SubKeyName & key & "\" End Select Next End If End Sub
仕組みは非常に単純で、下記のキー以下にある「File MRU」「User MRU」「Place MRU」キーを探し、履歴として残っている値(Item*)を削除する処理を再帰的に行っているだけです。
ただし、下記キー以下に対して順次処理を行っているため、すべての処理を終えるのに多少の時間は掛かります。
HKEY_CURRENT_USER\Software\Microsoft\Office\(Officeのバージョン)\(Officeアプリケーション)\
また、動作確認は行っているものの、上記スクリプトはレジストリの編集を行うものですので、実行は自己責任でよろしくお願いいたします。
この記事へのコメントはありません。