Microsoft verspricht ein besseres und produktiveres Arbeiten mit Smart Tags. Sie ermöglichen die Verknüpfung zu unterschiedlichen Informationsquellen, etwa anderen Office-Applikationen oder Internet-Inhalten. Smart Tags werkeln in Word, Excel und eingeschränkt auch in Outlook und Powerpoint. Nützlich sind sie etwa bei Autokorrekturen oder Formatzuweisungen. So gibt es durchaus gute Gründe, nach einem Punkt klein weiterzuschreiben - beispielsweise bei Abkürzungen. Da Word einen Punkt aber in der Regel als Signal für das Satzende interpretiert, erzwingt es im Anschluss an das Satzzeichen einen Großbuchstaben. Diese eigenmächtigen Eingriffe lassen sich nun mit Hilfe von Smart Tags unterbinden.
Aber Smart Tags können mehr. Anhand einer mitgeführten Wortliste versehen sie bestimmte Inhalte eines Dokuments mit einem Kurzmenü. Wird etwa ein in Word eingegebener Personenname als bekannt identifiziert, lässt er sich mit wenigen Mausklicks zu den Outlook-Kontakten hinzufügen. Das Versenden einer E-Mail ist auf die gleiche Weise möglich.
Wer sich mit den in Office XP enthaltenen Smart Tags nicht zufrieden gibt, kann auch Lösungen erstellen, die an die eigenen Bedürfnisse angepasst sind. Wir zeigen, welche Hilfsmittel Microsoft zur Verfügung stellt und welche Aufgaben sich damit bewältigen lassen. (tri)
Sicherheitsfragen
Bei allen hilfreichen Optionen, die Smart Tags bieten, bleibt die Frage: Wie steht es mit der Sicherheit? Schließlich kann niemand im Voraus erkennen, was genau sich hinter einem interessant klingenden Menüpunkt verbirgt. Und die Vorfälle um virenverseuchte E-Mail-Anhänge lassen wenig Hoffnung aufkommen, dass die User ausgerechnet bei Smart Tags geschicktem Social Engineering widerstehen.
Eine gewisse Kontrolle über Smart Tags erlaubt Microsoft dem Anwender mit den gleichen Mechanismen, die auch für Makros gelten. Die in Extras/Makro/Sicherheit getroffenen Einstellungen entscheiden also darüber, wie Smart Tags behandelt werden. Die Standardeinstellung ("Allen installierten Add-ins und Vorlagen vertrauen"), lässt allerdings jeden Smart Tag zu, unabhängig von der gewählten Sicherheitsstufe. Die Auswirkungen der möglichen Kombinationen zeigt die nachfolgende Tabelle:
Allen installierten Vorlagen und Add-ins vertrauen | Sicherheits- stufe | Smart Tag ist digital signiert | Aus ver- trauens- würdiger Quelle | Auswirkung |
---|---|---|---|---|
| ||||
Aktiviert | hoch/ mittel/ niedrig | ja/ nein | ja/ nein | Smart Tag wird geladen |
Deaktiviert | hoch | ja | ja | Smart Tag wird geladen |
Deaktiviert | hoch | ja | nein | Aufforderung |
Deaktiviert | hoch | nein | --- | Smart Tag wird nicht geladen |
Deaktiviert | mittel | ja | ja | Smart Tag wird geladen |
Deaktiviert | mittel | ja | nein | Aufforderung |
Deaktiviert | mittel | nein | --- | Aufforderung |
Deaktiviert | niedrig | ja/nein | ja/nein | Smart Tag wird geladen |
Weitere Sicherheitsbedenken richten sich gegen verräterische Spuren, die Smart Tags im Dokument hinterlassen. Es handelt sich hierbei um XML-Daten, die mitgesichert werden, wenn man das Einbetten von Smart Tags aktiviert hat. In den Speicheroptionen der Office-Anwendungen lässt sich dieses Verhalten jedoch deaktivieren.
Smart-Tag-Listen
Die einfachste Möglichkeit, eigene Smart Tags zu erstellen, führt über Smart-Tag-Listen. Diese liegen als XML-Dateien vor, so dass zum Erstellen ein Texteditor wie Notepad ausreicht. Komfortabler gelingt das jedoch mit dem Microsoft Office Smart Tag List Tool (MOSTL), das in den Advanced Smart Tag Tools enthalten ist.
Dahinter verbirgt sich die Excel-Vorlage SmartTagMOSTLGenerator.xlt, in die man alle relevanten Informationen eingibt. Kommentare liefern eine kurze Erläuterung zu Smart-Tag-Eigenschaften, Wortliste sowie möglichen Aktionen. Definiert man als Aktion eine URL, kann man an diese sogar Parameter übergeben. Dabei enthält die Variable {TEXT}
den als Smart-Tag-fähig erkannten Begriff.
Diese Möglichkeit wollen wir in einem Beispiel nutzen und die Suchmaschine auf tecChannel.de mit verschiedenen Begriffen füttern.
Smart-Tag-Listen: Beispiel
Für unser Beispiel ändern wir zunächst in MOSTL die Exporteinstellungen auf C:\\Programme\\Gemeinsame Dateien\\Microsoft Shared\\Smart Tag\\Lists. Dann belegen wir die in MOSTL vorgegebenen Smart-Tag-Eigenschaften wie Kurzbeschreibung und Sprach-ID mit Werten. Die Wortliste füllen wir mit einigen Begriffen aus dem Bereich der Viren und Würmer.
Den Termini ordnen wir vier mögliche Aktionen zu: Entweder werden auf tecChannel.de alle News auf diese Begriffe durchsucht oder alle Artikel in der Rubrik Software respektive Internet. Schließlich soll man auch noch über alle Rubriken suchen können. Die URL, in der wir unsere Suchanfrage unterbringen, lautet
http://62.96.227.81/tecchannel/setsearch.php?query=""&rubrik=""
Nach query= soll der als Smart-Tag-fähig markierte Begriff, etwa Virus, folgen. Die Variable {TEXT}
hilft hier weiter. Als Rubriken sind möglich: news, software, internet sowie ein Leer-String für die Suche über den gesamten tecChannel.
Abschließend generiert MOSTL per Mausklick aus diesen Daten das Smart Tag. Der kleine Helfer markiert von nun an jedes Wort aus der Liste und bietet unsere definierten Aktionen an.
Smart-Tag-Listen: Beispiel-XML-Code
Da die Listen als reine XML-Dateien vorliegen, reicht zur Eingabe ein simpler Texteditor. Nachfolgend finden Sie den Code, den wir in unserem Beispiel verwenden. Den kompletten XML-Code können Sie hier downloaden. Damit das Smart Tag geladen wird, aktivieren Sie unter Extras/Autokorrektur/Smarttags/ den Eintrag Smarttaglisten.
<?xml version="1.0" encoding="UTF-16"?>
<FL:smarttaglist xmlns:FL="urn:schemas-microsoft-com:smarttags:list">
<FL:name>tecchannel SmartTag</FL:name>
<FL:lcid>0</FL:lcid>
<FL:description>tecchannel-Artikelsuche</FL:description>
<FL:moreinfourl>http://</FL:moreinfourl>
<FL:smarttag type="urn:schemas-smarttaglistgenerator:excel #tecchannel_artikel">
<FL:caption>tecchannel-Artikelsuche</FL:caption>
<FL:terms><FL:termlist>Virus, Viren, Wurm, Würmer, Trojaner, Trojanisches Pferd, ILOVEYOU, Melissa, Malware, Backdoor</FL:termlist></FL:terms>
<FL:actions>
<FL:action id="tecchannel_news">
<FL:caption>News mit diesem Begriff auf tecChannel suchen</FL:caption>
<FL:url>
http://62.96.227.81/tecchannel/ setsearch.php?query={TEXT}&rubrik=news
</FL:url>
</FL:action>
<FL:action id="tecchannel_sw">
<FL:caption>Artikel mit diesem Begriff in der Rubrik Software auf tecChannel suchen</FL:caption>
<FL:url>
http://62.96.227.81/tecchannel/ setsearch.php?query={TEXT}&rubrik=software
</FL:url>
</FL:action>
<FL:action id="tecchannel_internet">
<FL:caption>Artikel mit diesem Begriff in der Rubrik Internet auf tecChannel suchen</FL:caption>
<FL:url>
http://62.96.227.81/tecchannel/ setsearch.php?query={TEXT}&rubrik=internet
</FL:url>
</FL:action>
<FL:action id="tecchannel_all">
<FL:caption>Artikel mit diesem Begriff in allen Rubriken auf tecChannel suchen</FL:caption>
<FL:url>
http://62.96.227.81/tecchannel/ setsearch.php?query={TEXT}&rubrik=
</FL:url>
</FL:action>
</FL:actions>
</FL:smarttag>
</FL:smarttaglist>
Smart-Tag-DLLs
Smart-Tag-DLLs sind flexibler als Listen, aber auch komplizierter zu entwickeln. Das in Microsoft-Office integrierte VBA reicht nicht aus. Wer allerdings mit dieser Makrosprache bereits einige Erfahrung besitzt, für den bietet sich Visual Basic an. Im Smart Tag Development Kit findet man aber auch ein Beispiel in Visual C++.
Office XP stellt die Smart Tags 1.0 Type Library zur Verfügung. Diese Bibliothek besteht aus einer Reihe von Eigenschaften und Methoden, die in zwei Schnittstellen zusammengefasst sind: ISmartTagRecognizer erkennt Zeichenketten als Smart-Tag-fähig; ISmartTagAction zeigt die Liste der möglichen Aktionen an und führt die jeweils gewählte aus.
ISmartTagRecognizer und ISmartTagAction
Zusammen stellen die beiden Module 18 Eigenschaften und Methoden zur Verfügung, die wir nachfolgend zusammengefasst haben:
Name der Eigenschaft oder Methode | Beschreibung |
---|---|
| |
Desc | Beschreibung des Smart-Tag-Recognizer |
Name | Name des Smart-Tag-Recognizer |
ProgID | Unique Identifier |
Recognize | Die Methode, die Zeichenketten als Smart-Tag-fähig erkennt |
SmartTagCount | Anzahl der Smart-Tag-Typen, die erkannt werden |
SmartTagDownloadURL | Die URL, die sich hinter Extras/Autokorrektur/Smart Tags/Weitere Smart Tags verbirgt |
SmartTagName | Unique Identifier für Smart-Tag-Typen, die dieser Recognizer erkennt |
Name der Eigenschaft oder Methode | Beschreibung |
---|---|
| |
Desc | Beschreibung der Smart-Tag-Aktion |
InvokeVerb | Die über das Smart-Tag-Action-Menü ausgelöste Aktion |
Name | Name der Aktion |
ProgID | Unique Identifier des Klassenmoduls |
SmartTagCaption | Überschrift des Smart-Tag-Action-Menüs |
SmartTagCount | Anzahl der Smart-Tag-Typen, die erkannt werden |
SmartTagName | Die verschiedenen Arten der Smart-Tag-Aktionen |
VerbCaptionFromID | Die Überschriften der Aktionen im Smart-Tag-Action-Menü |
VerbCount | Die Anzahl der von einem bestimmten Smart-Tag-Typ unterstützten Aktionen |
VerbID | Diese Eigenschaft gibt eine eindeutige ID innerhalb des Smart Tag zurück |
VerbNameFromID | Diese Eigenschaft gibt einen Namen zurück, der die Smart-Tag-Aktion repräsentiert |
Beispiel-DLL: Vorgaben
Wir wollen in Visual Basic eine Smart-Tag-DLL realisieren, die in einem Dokument nach den Namen der einzelnen Office-Applikationen sucht. Der Anwender soll die Möglichkeit haben, über das Smart-Tag-Menü Informationen über bereits dokumentierte Bugs zu der jeweiligen Anwendung auf search.microsoft.com abzufragen. Zu diesem Zweck belegen wir die Suchmaske auf der Microsoft-Seite mit dem Applikationsnamen sowie kbbug (=Knowledgebase Bug) vor.
Zunächst deklarieren wir unsere Wortliste im Modul ISmartTagRecognizer. Dann weisen wir den Eigenschaften von ISmartTagRecognizer und ISmartTagAction Werte zu. Die Prog_ID sollte man sich gut merken: Später beim Registrieren der DLL wird sie wichtig.
Die eigentliche Arbeit, das Erkennen des eingegebenen Texts, übernimmt die Methode Recognize. Eine Schleife analysiert, ob sich in den eingelesenen Zeichen die Begriffe Word, Excel, Access, Frontpage, Outlook oder Powerpoint befinden.
Beispiel-DLL: Aktionen
In ISmartTagAction stecken die zu den definierten Begriffen passenden Aktionen. Die Methode InvokeVerb bestimmt, was beim Anklicken eines bestimmten Smart-Tag-Menüpunkts geschieht. Gemäß unserer Wortliste unterscheiden wir sechs Fälle und rufen die URL search.microsoft.com mit den oben angeführten Abfragewerten auf.
Nach dem Kompilieren des VB-Projekts kopieren wir die erstellte Smart-Tag-DLL in den Ordner C:\\Programme\\Gemeinsame Dateien\\Microsoft Shared\\Smart Tag. Bevor es ans Testen gehen kann, müssen wir die DLL erst noch registrieren. Die folgenden Registry-Zweige nehmen die Prog_ID als leere Unterschlüssel auf:
HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\ Common\\Smart Tag\\Recognizers\
und
HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\ Common\\Smart Tag\\Action
Klappt nicht alles so wie geplant, hilft vielleicht ein Blick in Microsofts Smart-Tags-FAQ. In dieser Übersicht finden sich die häufigsten Fehlerursachen.
Beispiel-DLL: ISmartTagRecognizer-Quelltext
Den Quelltext dieser Klasse können Sie hier downloaden.
Option Explicit
Implements ISmartTagRecognizer
Dim terms(6) As String
Dim numTerms As Integer
Private Sub Class_Initialize()
terms(1) = "word"
terms(2) = "excel"
terms(3) = "access"
terms(4) = "frontpage"
terms(5) = "outlook"
terms(6) = "powerpoint"
numTerms = 6
End Sub
Private Property Get ISmartTagRecognizer_ProgId() As String
ISmartTagRecognizer_ProgId = "MSKB.SmartTagRecognizer"
End Property
Private Property Get ISmartTagRecognizer_Name(ByVal LocaleID As Long) As String
ISmartTagRecognizer_Name = "MS-Knowledgebase-Suche"
End Property
Private Property Get ISmartTagRecognizer_Desc(ByVal LocaleID As Long) As String
ISmartTagRecognizer_Desc = "MS-Knowledgebase-Suche nach Office-Begriffen"
End Property
Private Property Get ISmartTagRecognizer_SmartTagCount() As Long
ISmartTagRecognizer_SmartTagCount = 1
End Property
Private Property Get ISmartTagRecognizer_SmartTagName(ByVal SmartTagID As Long) As String
If (SmartTagID = 1) Then
ISmartTagRecognizer_SmartTagName = "ms-kb#kbsuche"
End If
End Property
Private Property Get ISmartTagRecognizer_SmartTagDownloadURL(ByVal SmartTagID As Long) As String
ISmartTagRecognizer_SmartTagDownloadURL = ""
End Property
Public Sub ISmartTagRecognizer_Recognize(ByVal Text As String, ByVal DataType As SmartTagLib.IF_TYPE, ByVal LocaleID As Long, ByVal RecognizerSite As SmartTagLib.ISmartTagRecognizerSite)
Dim intLoop As Integer
Dim intindex As Integer
Dim intTermLen As Integer
Dim stlpropbag As SmartTagLib.ISmartTagProperties
Text = LCase(Text)
For intLoop = 1 To numTerms
intindex = InStr(Text, terms(intLoop))
intTermLen = Len(terms(intLoop))
Do While intindex > 0
Set stlpropbag = RecognizerSite.GetNewPropertyBag
RecognizerSite.CommitSmartTag "ms-kb#kbsuche", intindex, intTermLen, stlpropbag
intindex = InStr(intindex + intTermLen, Text, terms(intLoop))
Loop
Next intLoop
End Sub
Beispiel-DLL: ISmartTagAction-Quelltext
Den Quelltext dieser Klasse können Sie hier downloaden.
Option Explicit
Implements ISmartTagAction
Private Property Get ISmartTagAction_ProgId() As String
ISmartTagAction_ProgId = "MSKB.SmartTagAction"
End Property
Private Property Get ISmartTagAction_Name(ByVal LocaleID As Long) As String
ISmartTagAction_Name = "MS-KB-Abfragen"
End Property
Private Property Get ISmartTagAction_Desc(ByVal LocaleID As Long) As String
ISmartTagAction_Desc = "MS-Knowledgebase-Suche nach Office-Begriffen"
End Property
Private Property Get ISmartTagAction_SmartTagCount() As Long
ISmartTagAction_SmartTagCount = 1
End Property
Private Property Get ISmartTagAction_SmartTagName(ByVal SmartTagID As Long) As String
If (SmartTagID = 1) Then
ISmartTagAction_SmartTagName = "ms-kb#kbsuche"
End If
End Property
Private Property Get ISmartTagAction_SmartTagCaption(ByVal SmartTagID As Long, ByVal LocaleID As Long) As String
ISmartTagAction_SmartTagCaption = "In der MS-Knowledgebase aufgeführte Office-XP-Bugs"
End Property
Private Property Get ISmartTagAction_VerbCount(ByVal SmartTagName As String) As Long
If (SmartTagName = "ms-kb#kbsuche") Then
ISmartTagAction_VerbCount = 6
End If
End Property
Private Property Get ISmartTagAction_VerbID(ByVal SmartTagName As String, ByVal VerbIndex As Long) As Long
ISmartTagAction_VerbID = VerbIndex
End Property
Private Property Get ISmartTagAction_VerbCaptionFromID(ByVal VerbID As Long, ByVal ApplicationName As String, ByVal LocaleID As Long) As String
Select Case VerbID
Case 1
ISmartTagAction_VerbCaptionFromID = "MS Word"
Case 2
ISmartTagAction_VerbCaptionFromID = "MS Excel"
Case 3
ISmartTagAction_VerbCaptionFromID = "MS Access"
Case 4
ISmartTagAction_VerbCaptionFromID = "MS Frontpage"
Case 5
ISmartTagAction_VerbCaptionFromID = "MS Outlook"
Case 6
ISmartTagAction_VerbCaptionFromID = "MS Powerpoint"
End Select
End Property
Private Property Get ISmartTagAction_VerbNameFromID(ByVal VerbID As Long) As String
Select Case VerbID
Case 1
ISmartTagAction_VerbNameFromID = "MS Word"
Case 2
ISmartTagAction_VerbNameFromID = "MS Excel"
Case 3
ISmartTagAction_VerbNameFromID = "MS Access"
Case 4
ISmartTagAction_VerbNameFromID = "MS Frontpage"
Case 5
ISmartTagAction_VerbNameFromID = "MS Outlook"
Case 6
ISmartTagAction_VerbNameFromID = "MS Powerpoint"
End Select
End Property
Private Sub ISmartTagAction_InvokeVerb(ByVal VerbID As Long, ByVal ApplicationName As String, ByVal Target As Object, ByVal Properties As SmartTagLib.ISmartTagProperties, ByVal Text As String, ByVal Xml As String)
Dim ie As Variant
Set ie = CreateObject("InternetExplorer.Application")
With ie
Select Case VerbID
Case 1
.Navigate2 "http://search.microsoft.com/us/dev/default.asp?qu=""Word 2002"" kbbug"
Case 2
.Navigate2 "http://search.microsoft.com/us/dev/default.asp?qu=""Excel 2002"" kbbug"
Case 3
.Navigate2 "http://search.microsoft.com/us/dev/default.asp?qu=""Access 2002"" kbbug"
Case 4
.Navigate2 "http://search.microsoft.com/us/dev/default.asp?qu=""Frontpage 2002"" kbbug"
Case 5
.Navigate2 "http://search.microsoft.com/us/dev/default.asp?qu=""Outlook 2002"" kbbug"
Case 6
.Navigate2 "http://search.microsoft.com/us/dev/default.asp?qu=""Powerpoint 2002"" kbbug"
End Select
.Visible = True
End With
End Sub