Automatyczne usuwanie listy ostatnio używanych dokumentów (MRU)

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ą.
Ten wpis został opublikowany w kategorii Konserwacja systemu i oznaczony tagami , , , , , , . Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.