die deutsche Version von Dragon bietet leider - im Gegensatz zur englischen - keine eingebauten Sprachbefehle, mittels derer man Datei-Anhänge in Outlook öffnen kann. Aus diesem Grund habe ich, angeregt durch Nachfragen von Marius, mir mal die Mühe gemacht und untersucht, inwieweit dies unter Éinbindung des per VBA zur Verfügung stehenden Objektmodells automatisiert werden kann. Eine (bei mir zumindest) funktionierende Lösung habe ich inzwischen gefunden, und den Code in Advanced Scripting werde ich unten vorstellen (nur verwendbar für Benutzer der professionellen Versionen von Dragon).
Die Lösung ist sicherlich nicht auf Anhieb einleuchtend, auch nicht bei bestehnden Kenntnissen im Umgang mit Skripten und VBA-Objekten, und erscheint möglicherweise sogar überladen. Allerdings, jede einzelne Zeile hat nicht nur ihren Sinn, sondern ist erforderlich, so dass ich nur empfehlen kann, den Code so, wie er ist, in ein neu erstelltes Skript einzufügen (die bei Erstellung automatisch eingefügten Zeilen Sub Main und End Sub müssen dabei vorher gelöscht werden), einen Namen wie "öffne Anhang", ergänzt um eine Liste mit dem Elementen "1-10" zu vergeben, das Skript als anwendungsspezifisch für Outlook zu definieren, und nicht zu vergessen, den Verweis auf die Microsoft Outlook Bibliothek zu setzen. Dann aber müsste es gehen.
Zusammengefasst besteht die Problematik der Automatisierung darin, dass bei HTML-Nachrichten Elemente im Textkörper enthalten sein können, Grafiken z.B., die vom Objekt aus zunächst als Anhang identifiziert werden, und zu diesem Zweck aussortiert werden müssen. Die Lösung dafür zu finden und (hoffentlich) zuverlässig anzuwenden, war die größte Hürde dabei. Im Internet findet man im Prinzip nur zwei Leute, die etwas Konstruktives zu dem Thema beizutragen haben.
Mit meiner Lösung werden (auf meinem System) zuverlässig alle Anhänge in den Formaten TXT, RTF, PDF, DOC(X), und alle Bildformate geöffnet. Für Problemfälle aber bin ich aufgeschlossen und bereit, weiter daran zu basteln. Ebenso offen natürlich auf für positive Rückmeldungen. Und nun der Code:
Private Declare Function SHGetSpecialFolderLocation _ Lib "shell32" (ByVal hWnd As Long, _ ByVal nFolder As Long, ppidl As Long) As Long
Private Declare Function SHGetPathFromIDList _ Lib "shell32" Alias "SHGetPathFromIDListA" _ (ByVal Pidl As Long, ByVal pszPath As String) As Long
Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal pvoid As Long)
Sub Main
Dim mail As MailItem Dim att As Attachment Dim tag3 As String Dim textPlain As String Dim i As Integer Dim a As Integer Dim msg As String i = 0 Dim realAtts() As Integer ReDim Preserve realAtts(0) realAtts(0) = 0
Set mail = Outlook.ActiveExplorer.Selection.Item(1)
For Each att In mail.Attachments textPlain = att.PropertyAccessor.GetProperty(tag3) If textPlain = "" Then i = i+1 ReDim Preserve realAtts(i) realAtts(i) = att.Index End If Next att
Dim lngPidlFound As Long Dim lngFolderFound As Long Dim lngPidl As Long Dim strPath As String
If lngPidlFound = NOERROR Then lngFolderFound = SHGetPathFromIDList(lngPidl, strPath) If lngFolderFound Then strPath = Left$(strPath, _ InStr(1, strPath, vbNullChar) - 1) If Right(strPath, 1) "" Then strPath = strPath & "" End If End If
CoTaskMemFree lngPidl
If strPath "" Then If Val(ListVar1) <= i Then a = realAtts(Val(ListVar1)) mail.Attachments.Item(a).SaveAsFile strPath & _ mail.Attachments.Item(a).FileName AppBringUp(strPath & mail.Attachments.Item(a).FileName) Else MsgBox "Attachment " & ListVar1 & " is not available." End If End If
Set MailItem = Nothing Set att = Nothing Set index = Nothing
End Sub
_______________________________________
Dragon Professional 16 auf Windows 10 Pro und Windows 11 SpeechMike Premium (LFH3500); Office 2019 Pro + Office 365 (monatliches Abo) HP ZBook Fury 17 G8 - i7-11800H - 24 MB SmartCache - 32 GB RAM - 1 TB SSD
Zitat von R.WilkeEbenso offen natürlich auf für positive Rückmeldungen
Lieber Rüdiger,
Dein Outlook-Skript zum Öffnen von Anhängen funktioniert einwandfrei. Vielen Dank für Deine Plackerei.
Für in Sachen Skripte Unbedarfte wie mich, hier noch der Hinweis: der Befehl könnte zum Beispiel lauten "Anhang öffnen ". Dann im Textfeld des Befehlseditors mit dem eingefügten Skript die Alt-und Enter-Taste drücken, um die Outlook 12.0 Object-Library (Office 2007) einzubinden. Anschließend auf "Name bearbeiten" klicken, den Skript-Befehl gegebenenfalls nochmal eingeben, auf Schaltfläche "Bearbeiten" klicken und untereinander die Ziffern eins bis zehn eingeben. Speichern. Dragon schließen und neu starten. So hat es jedenfalls bei mir funktioniert. Danach freut man sich auf jede E-Mail mit einem Anhang.
Allen Skript-Nutzern viel Spaß und Dir, Rüdiger, ein Wow!
Hans Löhr
DPI 15 auf Windows 10 Professional (64-bit) SpeechMike Premium. Intel i7 Core 4x2.67 GHz, 6 GB RAM
Dem öffentlichen Lob und Dank für unseren Administrator Rüdiger schließe ich mich gerne an! Sehr nützlich - und sehr schade, dass Nuance hier bei der Lokalisierung einfach Sprachbefehle "vergessen" hat!
Marius Raabe
Dragon NaturallySpeaking 11.5 Legal Windows 7 Prof. 64-Bit, Office 2010, Jarte Plus Philips SpeechMike II Pro Plus, SpeechMike III, SpeechMike Air, PDCC 2.8 Intel Core2 Quad Q9550, 2,83 GHz, 2x6MB L-2, 8 GB RAM
Danke, danke, aber wir sind ja noch mittendrin. Anbei eine erweiterte (wegen Marius' Problem-PDF's) und etwas aufgeräumtere Version als der Vorgänger, auch unten zum Herunterladen. Rückmeldungen sind ausdrücklich erbeten.
Rüdiger
Private Declare Function SHGetSpecialFolderLocation _ Lib "shell32" (ByVal hWnd As Long, _ ByVal nFolder As Long, ppidl As Long) As Long
Private Declare Function SHGetPathFromIDList _ Lib "shell32" Alias "SHGetPathFromIDListA" _ (ByVal Pidl As Long, ByVal pszPath As String) As Long
Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal pvoid As Long)
Sub Main
Dim mail As MailItem Dim att As Attachment Dim tag3 As String Dim contID As String Dim compTag As String Dim i As Integer Dim a As Integer Dim msg As String Dim realAtts() As Integer ReDim Preserve realAtts(0) realAtts(0) = 0
Set mail = Outlook.ActiveExplorer.Selection.Item(1)
For Each att In mail.Attachments contID = att.PropertyAccessor.GetProperty(tag3) compTag = Right(contID, Len(att.FileName)) If contID = "" Or contID = compTag Then i = i+1 ReDim Preserve realAtts(i) realAtts(i) = att.Index End If Next att
Dim lngPidlFound As Long Dim lngFolderFound As Long Dim lngPidl As Long Dim strPath As String
If lngPidlFound = NOERROR Then lngFolderFound = SHGetPathFromIDList(lngPidl, strPath) If lngFolderFound Then strPath = Left$(strPath, _ InStr(1, strPath, vbNullChar) - 1) If Right(strPath, 1) "" Then strPath = strPath & "" End If End If
CoTaskMemFree lngPidl
If strPath "" Then If Val(ListVar1) <= i Then a = realAtts(Val(ListVar1)) mail.Attachments.Item(a).SaveAsFile strPath & _ mail.Attachments.Item(a).FileName AppBringUp(strPath & mail.Attachments.Item(a).FileName) 'MsgBox(strPath & mail.Attachments.Item(a).FileName) Else MsgBox "Attachment " & ListVar1 & " is not available." End If End If
Set MailItem = Nothing Set att = Nothing Set index = Nothing
End Sub
_______________________________________
Dragon Professional 16 auf Windows 10 Pro und Windows 11 SpeechMike Premium (LFH3500); Office 2019 Pro + Office 365 (monatliches Abo) HP ZBook Fury 17 G8 - i7-11800H - 24 MB SmartCache - 32 GB RAM - 1 TB SSD
Dateianlage:
Aufgrund eingeschränkter Benutzerrechte werden nur die Namen der Dateianhänge angezeigt Jetzt anmelden!
f12t385p2586n62.txt
script works great, even better than Natural Language Commands an English version of DNS simply because you can open attachments without opening e-mail first.
Dim MailItem As MailItem Dim att As Attachment Dim msg As String Dim tag1, tag2, tag3 As String Dim hid As Boolean Dim isAtt As Boolean Dim mimeVal, contVal, inlineVal As String Dim iAtt As Integer Dim iInl As Integer 'Dim index As New Collection Dim i As Integer
If contVal = "" Then isAtt = True Else If mimeVal "" And Left(mimeVal, 5) "image" Then isAtt = True Else isAtt = False End If End If
If isAtt Then inlineVal = "- Anhang" iAtt = iAtt + 1 'index.Add (att.Index) Else inlineVal = "- Inline" iInl = iInl + 1 End If
msg = msg & att.Index & ". " & Left(att.FileName, 12) & vbTab & inlineVal & vbCrLf
Next att
msg = msg & vbCrLf & "Anhänge: " & iAtt & vbCrLf & "Inline: " & iInl MsgBox msg
Set MailItem = Nothing Set att = Nothing Set index = Nothing
End Sub
_______________________________________
Dragon Professional 16 auf Windows 10 Pro und Windows 11 SpeechMike Premium (LFH3500); Office 2019 Pro + Office 365 (monatliches Abo) HP ZBook Fury 17 G8 - i7-11800H - 24 MB SmartCache - 32 GB RAM - 1 TB SSD
Dragon Professional 16 auf Windows 10 Pro und Windows 11 SpeechMike Premium (LFH3500); Office 2019 Pro + Office 365 (monatliches Abo) HP ZBook Fury 17 G8 - i7-11800H - 24 MB SmartCache - 32 GB RAM - 1 TB SSD
Zitat von R.WilkeDer Dragon-Befehl muss dann zum Beispiel lauten "welche Anlagen".
Lieber Rüdiger,
ich weiß nicht genau, worauf sich Deine Korrespondenz mit Lindsay bezieht. Jedenfalls habe ich mal Dein Skript mit dem von Dir genannten Befehl ausprobiert. Effekt: Messages Box mit kurzen Hinweisen, wie die Anlagen heißen. Doch das sieht man ja auch im Fenster neben dem Posteingang, in dem der Text der E-Mail und die Dateinamen der Anhänge ersichtlich sind. Vielleicht magst Du mich mal aufklären.
Hans
DPI 15 auf Windows 10 Professional (64-bit) SpeechMike Premium. Intel i7 Core 4x2.67 GHz, 6 GB RAM
mit Lindsay hatte das nichts zu tun, mehr aber mit Marius. Man könnte sagen, was im Süden der Problem-Bär, ist im Norden die Problem-Mail, mit dem Unterschied, dass der Bär nicht mehr lebt, die Mail aber nun gerettet ist.
Das technische Problem bestand darin, dass Marius von einem bestimmten Absender, den fast das Schicksal des Bären ereilt hätte, Anhänge in einem sehr eigenwilligen Format erhält, die sich den anfänglich gefundenen Zugriffsmethoden schlicht entzogen haben. Das hängt mit bestimmten Eigenschaften zusammen, die Mails und Anhänge mit sich tragen, verborgen, aber wirksam.
Das logistische Problem bestand darin, dass die Inhalte der Anhänge streng geheim sind, so dass ich sie mir selbst nicht anschauen konnte, und immer nur Meldungen über Gelingen oder nicht Gelingen erhielt, nun eigentlich immer über nicht Gelingen, und das für immerhin gut zwei Wochen mit unzähligen Anläufen.
Das Skript "welche Anhänge" schließlich war der letzte - offensichtlich gelungene - Vorversuch der Identifizierung der Anhänge, bei Unterscheidung zwischen "echten" Anhängen und "embedded elements", die in HTML-Nachrichten enthalten sein können, woran die eindeutige Zuordnung allerdings bislang immer gescheitert ist.
Prüfen kannst Du das selbst mit einer Mail, die sowohl echte Anhänge als auch im Text eingefügte Grafiken (Bilder o.ä.) enthält, und dann entweder das Skript "welche Anhänge" ausführst, wo sie untereinander gelistet werden, oder aber bei Markierung der Mail in Outlook die Tasten Alt + Enter drückst.
Nun, nach so langer Rede dann endlich noch mal die Meldung, dass es dann doch, dem Geistes-Frieden längst geschuldet, am Ende noch die Lösung gab dafür.
Lieben Gruß Rüdiger
_______________________________________
Dragon Professional 16 auf Windows 10 Pro und Windows 11 SpeechMike Premium (LFH3500); Office 2019 Pro + Office 365 (monatliches Abo) HP ZBook Fury 17 G8 - i7-11800H - 24 MB SmartCache - 32 GB RAM - 1 TB SSD
Leider muss ich doch noch einmal nachhaken. Grundsätzlich funktioniert das Skript super, aber erst wenn ich den Dialog im Anhang bestätigt habe. Leider lässt sich dieser Dialog nicht per DNS steuern. Anscheinend ist um die Sicherheit des Nutzers zu gewähren die Funktionalitäten von DNS und sonstigen Makros ausgesetzt während dieser Dialog gezeigt wird. Im Dialog selber kann ich das ganze leider immer nur für 10 min aktivieren und nicht dauerhaft bestätigen. Hat jemand eine Idee dazu?
Danke
Nachtrag: anscheinend das ganze damit zusammen, dass ich das Microsoft Security Center (Spaß am Rande: DNS = Microsoft Sieg über die Fenster) deaktiviert habe-mein System ist durch Antivirus Software und eine zusätzliche Firewall ausreichend abgesichert, da brauche ich diesen ganzen Microsoft-Quatsch nicht. Dies würde ich auch weiterhin gerne so halten, ich wäre also an einer Lösung interessiert, die funktioniert ohne dass dieser Dienst aktiviert werden muss.
Angefügte Bilder:
Aufgrund eingeschränkter Benutzerrechte werden nur die Namen der Dateianhänge angezeigt Jetzt anmelden! f12t385p3018n86.jpg
ZitatLeider lässt sich dieser Dialog nicht per DNS steuern.
Warum nicht?
_______________________________________
Dragon Professional 16 auf Windows 10 Pro und Windows 11 SpeechMike Premium (LFH3500); Office 2019 Pro + Office 365 (monatliches Abo) HP ZBook Fury 17 G8 - i7-11800H - 24 MB SmartCache - 32 GB RAM - 1 TB SSD
Warum, das weiß ich nicht genau. Was passiert ist folgendes: sobald der Dialog aufgeht werden sämtliche DNS Befehle zurückgestellt und erst ausgeführt wenn der Dialog per Maus weg geklickt wurde. Auch eine Auswahl per Pfeiltasten ist nicht möglich. Die einzige Option ist die Maus.