Datendateien automatisch komprimieren

Zuletzt geändert am 03. April 2013

Mit Boardmitteln gibt es dazu leider keine Lösung.

Man kann aber mit Programmen arbeiten, die Maus-/Tastatureingaben aufzeichnen und dann wiedergeben. Ein bekanntes und bewährtes Tool ist zum Beispiel MacroExpress (Englisch). Ein vergleichbares Tool mit Deutscher Benutzeroberfläche ist MacroX. Beide Programme sind kostenpflichtig.

Es geht aber auch kostenlos mit dem Tool AutoHotKey. Das ist zwar nicht so komfortabel, funktioniert jedoch auch sehr zuverlässig.

Für Outlook® 2003, Outlook® 2007 und Outlook® 2010

Das automatische Abspielen von Tastatureingaben beinhaltet das Risiko, dass versehentlich Befehle an ein falsches Fenster gesendet werden, wenn sich dieses unerwartet in den Vordergrund drängt (z. B. ein Updatehinweis oder ein Hinweis vom Virenscanner etc.). In der Praxis ist dieses Risiko ziemlich gering und die Wahrscheinlichkeit, dass ein gesendeter Befehl einen Datenverlust auslöst, fast nur theoretischer Natur. Die Wahrscheinlichkeit steigt jedoch, wenn Sie den Wert für Delay extrem erhöhen (mehrere Sekunden). Dies sollten Sie nur zu Testzwecken tun und ansonsten den voreingestellten Wert von 100 ms lassen. Das Script funktioniert normaler weise auch mit einem Wert von 0 nur läuft dann alles so extrem schnell ab, dass man nichts mehr mitverfolgen kann.

Der Aufruf erfolgt (nach dem Download) per Doppelklick auf die jeweilige Datei. Dem Aufruf können 2 Parameter mitgegeben werden:

  1. /s
  2. Profilname

Der 1. Parameter bewirkt, dass keine Abfrage erscheint, ob die Komprimierung gestartet werden soll. Eine Abfrage ist z. B. bei geplanten Tasks gewünscht, jedoch nicht notwendig, wenn der Aufruf direkt aus Outlook® heraus erfolgt. Mit dem 2. Parameter können Sie ein bestimmtes Outlook®-Profil aufrufen. Dies ist nur erforderlich, wenn Outlook® nicht läuft und erst gestartet werden muss und Sie mehr als 1 Outlook®-Profil haben.

Beispiele:

Ruft die Komprimierung normal auf:

Compress.exe

Ruft die Komprimierung ohne Abfrage auf:

Compress.exe /s

Ruft die Komprimierung für ein bestimmtes Outlook®-Profil auf:

Compress.exe "Peter Marchert"

Hinweis: Wird ein falsches Profil angegeben, so beendet das Skript nicht automatisch, sondern muss mit einem Rechtsklick auf das weiße H auf grünem Grund beendet werden.

Ruft die Komprimierung für ein bestimmtes Outlook®-Profil ohne Abfrage auf:

Compress.exe /s "Peter Marchert"

Nach dem es sich um exe-Dateien handelt, können diese auch bequem in einen geplanten Task eingebunden werden. Es ist aber auch ein Aufruf aus Outlook® direkt möglich:

Option Explicit
 
Public Sub Compress()
 
    Call Shell("C:\Compress.exe /s", vbHide)
 
End Sub

Den Pfad zur Datei müssen Sie gegebenenfalls noch anpassen.

Wie Sie diesen Aufruf auf die Symbolleiste legen können, wird exemplarisch in dem Workshop VBA in Outlook® verwenden gezeigt. Beachten Sie dazu bitte auch die wichtigen Hinweise.

Für Outlook® 2003, Outlook® 2007 und Outlook® 2010

Für Interessierte nachfolgend der Code für das AutoHotKey-Skript:

; Compresses Outlook datafiles
; (c) Peter Marchert - http://www.outlook-stuff.com
; 2009-01-11 Version 1.0.0
; 2010-10-14 Version 2.0.0
; supported parameters: /s profile name
; /s = Silent mode
; profile name = Outlook profile name
; e. g. compress.exe /s "Max Muster"
 
; if you want to see, what the code does you can set a delay value in ms
Delay = 100
 
; determine the installed Outlook version
gosub GetOutlookVersion
 
if (Version = "2003")
{
    WinTitle1 = Outlook-Datendateien
    WinTitle2 = Persönliche Ordner
    ListView = SysListView321
}
else if (Version = "2007")
{
    WinTitle1 = Kontoeinstellungen
    WinTitle2 = Persönliche Ordner
    ListView = SysListView322
}
else if (Version = "2010")
{
    WinTitle1 = Kontoeinstellungen
    WinTitle2 = Outlook-Datendatei
    ListView = SysListView322
}
else
{
    MsgBox, Nicht unterstützte Outlook Version
    ExitApp
}
 
; script settings
; a window's title can contain WinTitle anywhere inside it to be a match
SetTitleMatchMode 2
; delay keystrokes
SetKeyDelay, %Delay%
 
; read parameters
param1 = %1%
param2 = %2%
 
; called with parameter? /s (=silent mode)
if (param1 = "/s")
{
  profile = %param2%
  goto silent  
}
else
{
  profile = %param1%
}
 
; ask user to start compressing now
MsgBox, 36, Datendateien komprimieren, Komprimierung der Outlook-Datendateien jetzt starten?
 
; user cancelled?
IfMsgBox No
  return
 
silent:
 
; activate and/or start Outlook
IfWinExist Microsoft Outlook
{
  ; activate Outlook
  WinActivate
}
else
{
  ; start Outlook
  ; Use the paramter /profile to start Outlook with a specified profile
  ; e. g. Run outlook /profile "Peter Marchert"
  if (profile <> "")
    Run outlook.exe /profile "%profile%"
  else
    Run outlook.exe
 
  WinWait Microsoft Outlook
  WinActivate
  Sleep 5000
}
 
; activate and/or open the account settings
IfWinExist %WinTitle1%
{
  ; activate account settings
  WinActivate
  bOpen = 1
}
else
{
  ; open account settings
  if (Version = "2003") or (Version = "2007")
  {
    Send {Alt down}dw{Alt up}
  } else {
    Send {Alt down}d{Alt up}
    Send {Tab 3}
    Send {Enter 2}
  }  
  WinWait %WinTitle1%
  if (Version = "2010") 
  {
    Send {Right}
  }
  bOpen = 0
}
 
; select the first data file
ControlFocus %ListView%, %WinTitle1%
 
; compress all data files in the list
ControlGet, List, List,, %ListView%, %WinTitle1%
Loop, Parse, List, `n
{
  If (Instr(A_LoopField, "Business Contact Manager") = 0)
  {
    If (Instr(A_LoopField, "Postfach") != 0) {
      Gosub, CompressOST
    } else {
      Gosub, CompressPST
    }
  }
  Sleep %Delay%
  Send {Down}
}
 
; close account settings if it was not open
if (bOpen = 0)
  WinClose %WinTitle1%
 
; script end
return
 
; compress a pst file
CompressPST:
Send !e
WinWait %WinTitle2%
Send !j
WinWait Jetzt komprimieren
WinWaitNotActive Jetzt komprimieren
WinClose %WinTitle2%
WinWaitNotActive %WinTitle2%
ControlFocus %ListView%, %WinTitle1%
return
 
; compress an ost file
CompressOST:
Send !e
WinWait Microsoft Exchange
Send ^{Tab}
Send !o
WinWait Einstellungen für Offlineordner
Send !j
WinWait Jetzt komprimieren
WinWaitNotActive Jetzt komprimieren
WinClose Einstellungen für Offlineordner
WinWaitNotActive Einstellungen für Offlineordner
WinClose Microsoft Exchange
WinWaitNotActive Microsoft Exchange
ControlFocus %ListView%, %WinTitle1%
return
 
; determine the installed Outlook version
GetOutlookVersion:
RegRead, Value, HKLM, SOFTWARE\Microsoft\Office\15.0\Outlook\InstallRoot, Path
if (errorlevel = 0)
{
  Version = 2012
  return
}
RegRead, Value, HKLM, SOFTWARE\Microsoft\Office\15.0\Common\InstallRoot\Virtual, VirtualOutlook
if (errorlevel = 0)
{
  Version = 2012
  return
}
RegRead, Value, HKLM, SOFTWARE\Microsoft\Office\14.0\Outlook\InstallRoot, Path
if (errorlevel = 0)
{
  Version = 2010
  return
}
RegRead, Value, HKLM, SOFTWARE\Microsoft\Office\14.0\Common\InstallRoot\Virtual, VirtualOutlook
if (errorlevel = 0)
{
  Version = 2010
  return
}
RegRead, Value, HKLM, SOFTWARE\Microsoft\Office\12.0\Outlook\InstallRoot, Path
if (errorlevel = 0)
{
  Version = 2007
  return
}
RegRead, Value, HKLM, SOFTWARE\Microsoft\Office\11.0\Outlook\InstallRoot, Path
if (errorlevel = 0)
{
  Version = 2003
  return
}
return

Damit Sie das Skript eigenen Bedürfnissen anpassen können, kopieren Sie es einfach in einen beliebigen Texteditor und speichern Sie es mit der Dateierweiterung .ahk ab. Um eine Exe-Datei zu erstellen, klicken Sie im Explorer mit der rechten Maustaste auf diese .ahk-Datei und wählen aus dem Kontextmenü den Punkt "Compile Script" aus.

Hinweis: Damit das Erstellen einer Exe-Datei funktioniert, muss AutoHotKey installiert sein.