lupo49 Geschrieben 7. August 2009 Geschrieben 7. August 2009 Tag, zukünftig werden bei uns Outlook Signaturen automatisch von einer Software erzeugt und an die entsprechende Stelle im Dateisystem gelegt. Folgendes Problem besteht allerdings zurzeit noch: Bei einer neuen E-Mail gibt es den Menüpunkt Einfügen | Signatur. Die Einträge hinter dem Menüpunkt werden nicht automatisch aktualisiert nach Löschen/Erzeugen von Signaturen. Beispiel: Ich lösche alle vorhandenen Signaturen (in %appdata%\Microsoft\Signatures) mittels der Software. Anschließend legt das Programm die neu generierten Signaturen im selben Verzeichnis ab. Wird jetzt eine neue E-Mail verfasst, erscheinen in dem o.g. Menüeintrag (s. Anhang) weiterhin die Namen der alten Signaturen. Die Einträge verschwinden erst, wenn jeder einzelne Eintrag einmal angeklickt und die entsprechende Fehlermeldung bestätigt wurde. Kennt einer eine Möglichkeit, diese Einträge automatisiert mittels Skript zu entfernen? (Die Einträge werden hex-kodiert in der Registry abgespeichert unter "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook", wobei sich die Namen der Schlüssel und Werte von Client zu Client unterscheiden.) Zitieren
tester2k5 Geschrieben 9. August 2009 Geschrieben 9. August 2009 Zum entfernen (pro User), muss der folgende Eintrag in der Registry gelöscht werden: HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\<profile name>\0a0d020000000000c000000000000046\101f035c Wenn die Profile alle gleich heißen, sollte es kein Problem sein. Mich würde hingegen interessieren, die neu erstellte Signatur gleich dort zu verlinken. Gruss, tester2k5 Zitieren
lupo49 Geschrieben 9. August 2009 Autor Geschrieben 9. August 2009 Wenn die Profile alle gleich heißen, sollte es kein Problem sein. Ja, genau dass ist das Problem. Die Profile heißen wie Sie wollen und ich meine, dass auch die Schlüssel nicht immer gleich heißen. Mich würde hingegen interessieren, die neu erstellte Signatur gleich dort zu verlinken. Wäre auch interessant, entspricht aber nicht dem Verhalten, wenn man mittels Outlook, eine Signatur anlegt. Die Namen der Signaturen existieren dort erst, wenn man diese einmal manuell eingefügt hat. Paar Hilfen habe ich schon gefunden: OL97: How to Use Command Bars in Outlook Solutions OutlookCode.com :: Selecting Outlook 2007 signature on send Re: per VBA das Feld "einfügen>Signatur>MeineSignatur" ansprechen Zitieren
tester2k5 Geschrieben 8. September 2009 Geschrieben 8. September 2009 Bin leider immer noch nicht zum testen gekommen, aber prinzipiell sollte ein Query aller Sub-Registry-Folder von "Windows Messaging Subsystem\Profiles\" möglich sein... Gruss, tester2k5 Zitieren
tester2k5 Geschrieben 17. September 2009 Geschrieben 17. September 2009 Der Code sollte dir weiterhelfen: Const HKEY_CURRENT_USER = &H80000001 strComputer = "." Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ strComputer & "\root\default:StdRegProv") strRootKeyPath = "Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles" objReg.EnumKey HKEY_CURRENT_USER, strRootKeyPath, arrSubKeys For Each objSubKey In arrSubKeys WScript.Echo "Outlook Profile = " & objSubKey Next Set objReg = Nothing Gruss, tester2k5 Zitieren
lupo49 Geschrieben 17. September 2009 Autor Geschrieben 17. September 2009 Vielen Dank, werde ich den nächsten Tagen mal testen und berichten. Zitieren
lupo49 Geschrieben 5. Oktober 2009 Autor Geschrieben 5. Oktober 2009 So hier mal mein fertiges Skript, für die, die es interessiert: ' Name: OutlookSignaturenCache.vbs ' Datum: 04.10.2009 ' Set objWSHShell = WScript.CreateObject("WScript.Shell") Set oFS = CreateObject("Scripting.FileSystemObject") Const st_TEMPFILE = "signature-temp.reg" ' Variablen definieren SignatureName = "Signatur 1" RegPath = "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\" ' Outlook Standardprofil auslesen und mit dem Namen weiterarbeiten OutlookProfile = objWSHShell.RegRead(RegPath & "DefaultProfile") ' Der Wert der nachfolgenden Variable legt zwei Signatureinträge "Signatur 1" und "Signatur 2" an. NeueSignatureEintraege = "0a,00,00,00,2c,00,00,00,42,00,00,00,44,00,00,00,46,00,00,00,48,00,00,00,4a,00,00,00,4c,00,00,00,4e,00,00,00,50,00,00,00,52,00,00,00,53,00,69,00,67,00,6e,00,61,00,74,00,75,00,72,00,20,00,31,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,53,00,69,00,67,00,6e,00,61,00,74,00,75,00,72,00,20,00,32,00,00,00" ' Auswaehlen, ob neue Cache-Signatureintraege erzeugt werden oder die alten nur entfernt werden sollen. ErzeugeNeueEintraege = "1" ' Erstellen der Registryeintraege fuer die Standard- und Antworte-Signatur ' (Outlook verwendet in der Registry REG_BINARY als Speichertyp. REG_SZ geht auch.) ' objWSHShell.RegWrite RegPath & OutlookProfile & "\9375CFF0413111d3B88A00104B2A6676\00000001\New Signature", SignatureName, "REG_SZ" ' objWSHShell.RegWrite RegPath & OutlookProfile & "\9375CFF0413111d3B88A00104B2A6676\00000001\Reply-Forward Signature", SignatureName, "REG_SZ" ' Alte Cache-Eintraege loeschen (Menuepunkt: Neue E-Mail | Einfügen | Signatur) objWSHShell.RegDelete RegPath & OutlookProfile & "\0a0d020000000000c000000000000046\101f035c" ' Neue Cache-Eintraege anlegen ' Das Erzeugen neuer Eintraege geschieht ueber einen Umweg, da per VBA kein direktes Schreiben von Binaerwerten in die Registry moeglich ist. ' Als Erstes wird eine temporaere .reg-Datei erzeugt mit dem notwendigen Inhalt erzeugt, die dann in einem zweiten Schritt in die Registry geschrieben wird. if ErzeugeNeueEintraege = "1" Then Set txtStream = oFS.CreateTextFile(st_TEMPFILE, true) txtStream.WriteLine("Windows Registry Editor Version 5.00") txtStream.WriteLine("") txtStream.WriteLine("[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\" & OutlookProfile & "\0a0d020000000000c000000000000046]") txtStream.WriteLine(chr(34) & "101f035c" & chr(34) & "=" & "hex:" & NeueSignatureEintraege ) txtStream.Close objWshShell.Run "regedit /s " & st_TEMPFILE, 1, true oFS.DeleteFile st_TEMPFILE End if Set objWshShell = Nothing Set oFS = Nothing ' eof Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.