Gdy otwieramy jakiś plik do edycji to np. Word zapisuje ten plik w liście ostatnio używanych plików. W literaturze spotkasz się z pojęciem MRU (ang. Most Recently Used – lista ostatnio używanych [plików]).

Na własne potrzeby postanowiłem napisać prosty programik, który w programach z pakietu MS Office czyści MRU.
W warunkach domowych takie zacieranie śladów wydaje się podejrzane, ale są sytuacje gdy ma to sens. Przykładowo w firmach szkoleniowych kursanci tworzą np. na pulpicie bądź w dokumentach pliki ćwiczeniowe. Czasami w nazwach tych plików (albo folderów) pojawia się imię i nazwisko kursanta. No i tutaj kłania się RODO 😉 A tak na poważnie: inni nie muszą wiedzieć, że w poprzedniej grupie szkoleniowej na tym konkretnym komputerze pracowała Jadzia Kowalska, która redagowała swoje CV.
Od pomysłu do wykonania minęło kilka chwil. Zastanawiałem się nad tym, w czym napisać owy skrypt. Pomysły były różne:
- Visual Basic 6 – wstyd się przyznać, znam dość dobrze ten język programowania, ale jest on dość leciwy, a nowsze wersje Windowsa czepiają się plików wykonywalnych skompilowanych przez VB6
- VBA – składnia podobna do VB6, ale hmmm po co odpalać kobyłę jaką jest Word/Excel tylko po to, aby usunąć kilka kluczy z rejestru windows?
- Czas na naukę VB.NET – hmmm niby najlepsze rozwiązanie, można się pokusić o napisanie fajnej okienkowej appki, ale tutaj pojawia się pytanie: przecież nie potrzebuję pisać programu, który będzie miał miliony checkboxów do obklikania. Interface graficzny jest zupełenie niepotrzebny.
- PowerShell – chyba najlepszy pomysł, ale musiałbym się nauczyć czegoś nowego. A ja się uparłem, że chcę mieć tą appkę już teraz
- VBScript – bingo! Jest to prosty język skryptowy, składnia dość podobna do VB6/VBA, każda współczesna wersja Windowsa odpala pliki VBScript. Nie muszę instalować żadnego IDE (wystarczy dobry notatnik z kolorowaniem składni – ja używam płatnego EditPadPro, ale Notepad++ też da radę). Jedyna wada: dużo antywirusów uważa pliki VBS za podejrzane, takich plików również nie wyślesz mailem jako załącznik, gdyż większość serwerów nie dostarcza wiadomości z plikami VBS.
Być może zadasz sobie pytanie: a nie lepiej by było wyłączyć w Wordzie bądź Excelu tworzenie listy ostatnio otwieranych dokumentów?? Wszak to raptem kilka kliknięć myszą (Plik->Opcje->Zaawansowane)

Pewnie, że można tak zrobić, ale byłoby to niewygodne. Chciałbym, aby kursanci mogli wygodnie otworzyć plik, który np. wcześniej był zamknięty a dopiero pod koniec ostatniego dnia szkolenia można było łatwo "zatrzeć wszystkie ślady po sobie".
Pobierz darmowy skrypt ClearOfficeMRU (plik ZIP) lub ClearOfficeMRU.vbs (plik nieskompresowany).
Uwaga: niektóre nadgorliwe programy antywirusowe uważają, że skoro plik ma rozszerzenie VBS to może być to wirus. Przykładowo u mnie Windows Defender plik ZIP od razu kasuje, ale jak ściągam plik VBS (niespakowany) to jest wszystko OK. Paradoksalnie, jeśli ten sam plik ZIP kopiuję z dysku na dysk, to wszystko jest OK.
Pobrany plik należy rozpakować i zapisać w dowolnym folderze. Dwukrotne kliknięcie uruchomi skrypt. Można go zapisać np. na pulpicie (wtedy każdy uczestnik szkolenia komputerowego będzie mógł szybko i wygodnie zatrzeć ślady po sobie – jak to robią prawdziwi Skauci 😉 ).
Co skrypt czyści?
- Elementy MRU z Worda, Excela, Accessa i PowerPointa
- Obsługiwane wersje MS Office: 2007, 2010, 2013, 2016, 2019, 365
- Elementy MRU z AdobeReader'a DC (kursanci tworząc CV zapisują je w formacie PDF a AdobeReader to chyba najpopularniejszy czytnik plików PDF)
- Elementy MRU z WordPada i Painta (czasami na szkoleniu jakaś sierotka zamiast Worda włącza WordPada)
- MRU z ostatnio uruchamianych poleceń z okienka Uruchom (Windows+R)
- Dodatkowo za pomocą skryptu (domyślnie jest to zakomentowane) można wyczyścić listę wszystkich plików, które w Wordzie/Excelu oznaczyliśmy jako zaufane (czyli wyraziliśmy Wordowi/Excelowi zgodę na wykonywanie makr bez pytania się o nią)
Uruchomienie programu
Pobrany plik ClearOfficeMRU.vbs zapisz w dowolnym folderze (może to być pulpit). Aby wyczyścić elementy MRU wystarczy po prostu dwa razy kliknąć w plik i po chwili pojawi się taki oto komunikat:

Konfiguracja skryptu
Otwórz plik w jakimś porządnym notatniku (polecam darmowy Notepad++ aczkolwiek płatny EditPadPro lepiej podświetla składnię).

Poniższy fragment kodu mówi, jakie wersje obsługuje program:
- 12.0 – Office 2007
- 14.0 – Office 2010
- 15.0 – Office 2013
- 16.0 – Nowsze wersje tj. 2016, 2019 i 365
Zwróć uwagę, że w Microsofcie są przesądne osoby i żadna wersja pakietu Office nie ma numeru 13 😉 Jeśli na danym komputerze masz zainstalowaną tylko wersję 2019 to w poniższej linijce możesz usunąć "nieużywane" wersje (skrypt będzie sprawdzał mniej kluczy w rejestrze, ale nie musisz nic zmieniać, jak nie masz zainstalowanej np. wersji 2007 to skrypt nie znajdzie w rejestrze klucza HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\File MRU i po prostu będzie szukał innych kluczy dla kolejnych wymienionych wersji)
OffVer = Array("12.0", "14.0", "15.0", "16.0")
Na sztywno zdefiniowałem, jakich programów należy się spodziewać na komputerze. Jeśli używasz wersji jakiejś okrojonej wersji pakietu MS Office to prawdopodobnie możesz usunąć Accessa i Publishera z owej listy:
OffApp = Array("Access", "Excel", "Publisher", "PowerPoint", "Word")
W tej linijce:
OffDir = Array("File MRU", "Place MRU", "Recent File List") ', "Security\Trusted Documents\TrustRecords")
Są podane nazwy kluczy, pod jakimi należy szukać elementów. Są to:
- File MRU – Word czy Excel zapisują tam nazwy (wraz ze ścieżką dostępu) do ostatnio otwieranych dokumentów.
- Place MRU – Word czy Excel zapisują tam foldery w których ostatnio otwieraliśmy pliki (ostatnio używane miejsca)
- Recent File List – niektóre programy (np. niewymieniony tutaj MS Project) zapisują MRU w tym kluczu. Więc dodatkowo tę lokalizację dodałem "tak na zaś" do sprawdzenia.
- Obok owej tablicy w komentarzu jest dodatkowy klucz, który można dodać do tablicy: Security\Trusted Documents\TrustRecords – jeśli go dodamy, to w programach pakietu Office wyczyścimy listę wszystkich plików, które użytkownik dodał do zaufanych. Wtedy nasza linijka tak będzie wyglądała:
OffDir = Array("File MRU", "Place MRU", "Recent File List", "Security\Trusted Documents\TrustRecords")
Jeśli na komputrze masz zainstalowaną wersję starszą niż 2016 to możesz usunąć poniższe 4 linijki:
'W wersji 16.0 jest dodatkowy klucz UserMRU a w nim podklucze
For i=0 to UBound(OffApp)
Call OfficeKeyUserMRU("16.0", OffApp(i))
Next
Jeśli nie używasz Adobe Readera to możesz usunąć tę linijkę:
Call AdobeAcrobatReaderDC
W tej tablicy dodałem klucze, gdzie elementy MRU przechowuje WordPad, Paint oraz okno dialogowe uruchom.:
' Jak chcesz na własne potrzeby dopisać na sztywno jakąś gałąź rejestru z której usuwasz elementy możesz to zrobić tutaj
Custom = Array("Software\Microsoft\Windows\CurrentVersion\Applets\Wordpad\Recent File List", _
"Software\Microsoft\Windows\CurrentVersion\Applets\Paint\Recent File List", _
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU")
No i na koniec: jeśli chcesz np. dodać ten skrypt do autostartu, to należy odkomentować poniższą linijke (usuń apostrof, zapisz zmiany w pliku i go uruchom)
' Call AddToAutostart
Jeśli dodasz program do auostartu, to prawdopodobnie nie będziesz chciał, aby za każdym razem przy uruchomieniu komputera pojawiało się okienko dialogowe z informacją o wyczyszczeniu MRU. Możesz zakomentować (dodać na początku apostrof) w linijce z instrukcją MsgBox:
' MsgBox Info, vbInformation, "Clear Office MRU v 1.0"
A dlaczego piszesz własny program, skoro CCleaner ma podobną funkcjonalność?
Owszem. Jeśli chcę mogę uruchomić CCleanera. Ale ten program ma kilka wad:
- Trzeba uruchomić, włączyć czyszczenie niestandardowe co chwilę trwa
- Mój programik jest bezobsługowy można dodać do autostartu i sam czyści elementy MRU, ewentualnie może być ikonka na pulpicie w którą wystarczy tylko dwa razy kliknąć i tyle.
- Nie mam zaufania do programu, który został kiedyś zhackowany

Podsumowanie
I to by było chyba na tyle. Troszkę się pobawiłem i napisałem na własne potrzeby prosty skrypt, którym się z Tobą dzielę. Podczas "nauki" VBScript zauważyłem trzy denerwujące mnie rzeczy:
- Można deklarować zmienne, ale nie mają one typu co jest dla mnie trochę dziwne (z drugiej strony jest to język interpretowany a nie kompilowany)
- We wszystkich dialektach Basica, jakie znam (Basic, QBasic, VB6, VBA, VB.NET) pętlę For zamykałem instrukcja Next <nazwa zmiennej>. W VBScript jest to błąd i po prostu się pisze samo Next bez nazwy zmiennej.
- Nadgorliwość antywirusów. Cały dzień operowałem na pliku i było OK. Ale jak go wrzuciłem do ZIPa i do Internetu to Windows Defender nie pozwalał mi pobrać tego ZIPa z własnego serwera. Również w mailu jako załącznik nie da się wysłać tego pliku bo gmail i inne serwery pocztowe go blokują.