|
|
![]() |
||
|
|
Worum geht es?Bis heute ist sie eine der genialsten Erfindungen von Microsoft: die Zwischenablage.
Ein unter Microsoft Word häufig verbreitetes Problem beim Austausch von Textmaterial mit anderen Benutzern ist, dass man beim Einfügen standardmäßig auch die Formatvorlagen aus dem Quelldokument übernimmt. Dies führt nicht nur zu einer Formatierung, die unpassend zum Rest des eigenen Texts ist, sondern auch zur Anhäufung nicht benötigter Formatvorlagen. Oft erreicht man schnell den Punkt, an dem man den Formatvorlagen-Katalog nicht mehr übersichtlich nutzen kann Genau für dieses Problem wird nachfolgend zunächst eine sehr simple, aber für viele Fälle ausreichende Lösung präsentiert. Übung 5: Inhalt der Zwischenablage beim Einfügen verändernErstellen Sie in der Registerkarte "Tastatur" des Workarounder-Hauptfensters den nachfolgend abgebildeten Datensatz: |
||
|
|
|||
|
Nach Schließen von Workarounder sollten Sie nun einen deutlichen Unterschied sehen, wenn Sie einen formatierten Text in die Zwischenablage kopieren und zunächst wie gewohnt (z.B. mit Strg+v) und dann mit Strg+Alt+v einfügen: |
|||
|
|
|||
|
Erläuterung und Weiterentwicklung des verwendeten SkriptsLieber Leser, Im weiteren Verlauf dieses Kapitels werden wir das Innenleben von VisualBasic-Skripten näher beleuchten und im nächsten und abschließende Kapitel empfehlenswertes Zubehör für die Skript-Entwicklung vorstellen. Falls Sie nicht zu dieser Anwendergruppe gehören, ist es problemlos möglich, auf die Lektüre des weiteren Tutorials zu verzichten. Vielleicht möchten Sie dann auf die Tipps des 1. Kapitels zum weitergehenden Erkunden von Workarounder zurückkommen. Funktion des Beispielskripts DefPasteClipboard.vbsDie Funktion des oben verwendeten Skriptes lässt sich anhand seines nachfolgend abgebildeten Quelltextes leicht erklären. |
|||
|
|
|||
|
Die erste ausführbarer Programmzeile ist die Zeile Nummer 14. (Alle darüber liegenden Zeilen beginnen mit einem Hochkomma und sind Kommentare.) In dieser Zeile wird eine neue Kopie des Workarounder-Automatisierungsobjektes "WinTools" erzeugt, dass Ihnen die nachfolgend benötigten Funktionen zur Verfügung stellt. Genau dies passiert in der nächsten ausführbaren Programmzeile Nummer 19. Der Text-Inhalt der Zwischenablage ist nämlich eine so genannte "Eigenschaft" dieses Objektes und wird hier in die Variable x ausgelesen. Anschließend wird der Inhalt der Zwischenablage mit der Tastenkombination Strg+v wieder in die Anwendung eingefügt. Die letzte Zeile hebt diese Blockierung wieder auf und zeigt übrigens einen vollständigen Aufruf einer so genannten "Funktion" eines Objektes. Funktionen können aber auch ohne Verwertung des Rückgabewertes aufgerufen werden, dann braucht man keine Klammern schreiben. Ihr Aufruf sieht dann genauso aus wie der Aufruf einer Prozedur. Solch einen Prozedur-Aufruf sieht man in Zeile 26. Im Gegensatz zu einer Funktion kann eine Prozedur keinen Rückgabewert liefern und ihre Parameter werden in VisualBasic immer ohne Klammern angegeben. Mehrere Parameter werden übrigens durch Kommata voneinander abgetrennt. Die BlockInput-Funktion kann übrigens auch ganz ohne Parameter aufgerufen werden. Dies sieht man in Zeile 25. Dann greift nämlich true als Standardvorgabe des Parameters, wie man in Hilfe-Dokument erfährt. Bei Bedarf können Sie Varianten dieses Skriptes erstellen, die die Daten in der Zwischenablage auch inhaltlich verändern. Dazu könnten Sie unterhalb von Zeile 19
Wenn Sie in einer solchen Skript-Variante die letzte Operation ("Strg+v senden" ab Zeile 24) eliminieren, können Sie diese Variante auch als Aktion beim Kopieren in die Zwischenablage einsetzen. Diese Aktion wäre dann spezifisch für die Quellanwendung, aus der der Zwischenablageninhalt stammt und wird am besten in der nachfolgend beschriebenen Registerkarte "Zwischenablage" eingesetzt. Übrigens: Wenn Sie die beiliegenden Skripte verändern, sollten Sie Ihre neuen Versionen unter einem eigenen Dateinamen abspeichern. Andernfalls könnten Sie Ihre Skriptversionen verlieren, falls Sie Workarounder updaten. Die neu erzeugten Dateien binden Sie über die Schaltfläche "(Neues) Skript wählen", unten rechts im Hauptfenster in Ihre Ereignisdatensätze ein. Hinweis 2: zum TroubleshootingNun wo Sie die Funktion des Skriptes kennen, können Sie sich sicherlich ausmalen, was passieren würde, wenn Sie den automatischen Start die Skriptes nicht durch die Tastenkombination Strg+Alt+v auslösen würden, sondern durch Strg+v: In solchen Fällen keine Panik: Sie brauchen das Workarounder-Hauptfenster nur durch Doppelklick auf das Symbol in der Taskleiste öffnen, um die Ereignis Überwachung und damit auch die Endlosschleife zu unterbrechen. Eine "intelligentere" LösungObwohl die mit dem beiliegenden Beispielskript gezeigte Lösung sicherlich für die allermeisten Anwender völlig ausreichend ist, wollen wir diese Lösung weiter entwickeln, um zu zeigen, wie man bei spezielleren Anforderungen prinzipiell vorgehen kann. An der bisher gezeigten Vorgehensweise könnte man nämlich die folgenden Punkte als verbesserungsbedürftig bemängeln:
Statt den Anwender vor die Entscheidung zu stellen, ob er Strg+v oder Strg+Alt+v anwendet, kann man die dazu erforderliche "Intelligenz" in das Skript integrieren. 2. Skriptversion: DefPasteClipboardDict.vbsVersuchen Sie, den dargestellten Lösungsweg zunächst einmal nur theoretisch nachzuvollziehen. Die neue Skriptversion finden Sie dann bei Bedarf im Unterverzeichnis VB-Skripte\Vorlagen, falls Sie das Gezeigte in die Praxis umsetzen wollen. Zunächst müsste das Skript beim Einfügen der Zwischenablage "wissen", welche Art von Inhalt in der Zwischenablage ist, um zu entscheiden, ob dieser Inhalt normal oder unformatiert eingefügt werden soll. Dieses Wissen kann aber nur beim vorhergehenden Kopieren in die Zwischenablage gewonnen werden. Wir brauchen also:
Entscheidend für die Lösung ist die zentrale 2. Punkt. Da Workarounder ein einfach zu verwendendes Objekt mitbringt, dass sich hierfür einsetzen lässt, wird das Ganze wesentlich leichter, als es zunächst aussieht. |
|||
|
|
|||
|
In den Zeilen 35 bis 40 wird zunächst ein Wert aus dem FlexiDict-Objekt ausgelesen. Das FlexiDict-Objekt kann mehrere Einträge haben. Die Einträge sind alle mit einem frei wählbaren Textausdruck benannt, der in unserem Fall "ClipSender" heißen soll. Mit den Zeilen 43 und 47 bis 51 möchte ich Sie auf mögliche Vorsichts- bzw. Routinemaßnahmen für sauberes Programmieren hinweisen. Eine Erläuterung dazu entnehmen Sie bitte den Kommentaren im Programmtext. In unserem konkreten Fall würde das Skript genauso gut ohne diese Zeilen auskommen. Am Ende dieser "Skript-Besprechung" müssen wir feststellen, dass auch in dieser Variante noch keine "Intelligenz" vorhanden ist, um die Entscheidung über formatiertes oder unformatiertes Einfügen zu treffen. Die getroffene Entscheidung hängt gänzlich von dem Inhalt des FlexiDict-Eintrages namens "ClipSender" ab. Das Befüllen des FlexiDicts im Zwischenablage-RegisterWir erinnern uns an die im letzten Abschnitt geplanten Schritte 1. und 2. Die "Intelligenz" unserer Lösung kommt aus der Art und Weise, wie wir das FlexiDict mit Informationen füttern. In der Registerkarte "Zwischenablage" legen Sie die beiden nachfolgend abgebildeten Datensätze an. |
|||
|
|
|||
|
Die im oberen Datensatz abgebildete Kombination löst das Ereignis immer dann aus, wenn in Word-Text in die Zwischenablage aufgenommen wird, unabhängig davon, ob zusätzlich Grafikdaten kopiert werden oder nicht. Wenn dieses Ereignis beim Kopieren in die Zwischenablage nicht greift, wird auf jeden Fall der 2. Datensatz aktiv. Hier wird die Aktion unabhängig von der Quell-Anwendung ausgelöst, wenn Daten in mindestens einem der drei Formate in die Zwischenablage aufgenommen werden. Dadurch wird das in der 2. Skriptversion verwendete Schlüsselwort gegebenenfalls aus dem FlexiDict gelöscht. Das Verhalten dieser beiden Datensätze führt dazu, dass das Schlüsselwort nur dann im FlexiDict gespeichert ist, wenn die Zwischenablage Word-Text enthält. Beim Einfügen mit Strg+v kann das Skript diese Information auswerten und ein unformatiertes Einfügen vornehmen. Andernfalls erfolgt ein normales Einfügen. Reihenfolge und gefilterte Anzeige der Datensätze im HauptfensterEntscheidend ist bei dieser Funktion auch die Reihenfolge der Datensätze. Außer bei Ereignissen im Zeit-Register, wird für jedes überwachte Ereignis nur die erste Aktion ausgeführt, für die alle Kriterien zutreffen. Auch die 3. Schaltfläche von rechts hat eine interessante Funktion: Hier öffnen Sie ein Formular, in dem Sie folgende Kriterien angeben können, um die im Hauptfenster angezeigten Datensätze zu filtern:
Der zweite Datensatz würde z.B. ausgeblendet, wenn Sie im Filterkriterium "aktiviertes Fenster" folgenden Wert angeben: *word* Abändern des Datensatzes im Tastatur-RegisterDamit die ganze Lösung funktionsfähig wird, müssten Sie abschließend in die Registerkarte "Tastatur" wechseln und den im ersten Teil der Übung angelegten Datensatz wie nachfolgend abgebildet ändern. Die oben abgebildete 2. Skript-Version finden Sie im Ordner "Vorlagen" unterhalb des Skript-Verzeichnisses. |
|||
|
|
|||
|
Möglichkeiten zur Weiterentwicklung der vorgestellten LösungSie können natürlich auch für Zwischenablagen-Inhalte aus verschiedenen Quellanwendungen (oder Dokumenten) unterschiedliche Schlüsselwörter definieren und auf die gezeigte Weise beim Kopieren im FlexiDict-Objekt speichern.
Dabei müssten Sie das in der 2. Skriptversionen ab Zeile 35 stehende If-Then-Konstrukt für jedes zusätzliche Schlüsselwort um ein Elseif ... Then erweitern (oder eine entsprechende select case Anweisung verwenden). Falls erforderlich, können Sie also sehr spezifische Regeln für die automatische Formatauswahl beim Einfügen aus der Zwischenablage festlegen. Dies mag umständlich anmuten, aber z. B. bei großen Word-Dokumenten mit sehr vielen eingefügten Inhalten kann die falsche Formatwahl beim Einfügen im Extremfall einen Totalverlust nach sich ziehen. Weitere Informationen zum FlexiDict-ObjektDie in dieser Übung gezeigte Funktionsweise des FlexiDict-Objektes gleicht einer zentralen Ablage mit unterschiedlichen Fächern (bzw. Einträgen). Für jedes dieser Fächer wird ein Name vergeben, damit verschiedene Fächer unterschieden werden können (in unserem Beispiel war der Name "ClipSender"). In unserem Beispiel haben Sie gesehen, wie Workarounder beim Kopieren über sein "internes Skript" >AddToDict eine Information in solch einem Fach bzw. Eintrag abgelegt hat. Beim Einfügen wurde ein "echtes Skript" gestartet, das wie ein eigenständiges Programm in einem anderen Prozess als Workarounder abläuft. Dieses Skript hat dann die Information aus dem Fach bzw. Eintrag ausgelesen und weiterverarbeit. Nachteil bei dieser Vorgehensweise ist, dass jedes Programm oder Skript, das auf eine Information aus dem FlexiDict wartet, das FlexiDict immer wieder aktiv abfragen muss. (Ähnlich, einer Person die auf einen wichtigen Brief wartet und deshalb ständig zum Briefkasten läuft, um zu schauen, ob die Post schon da ist.) Um diesen Nachteil zu vermeiden, können Sie das FlexiDict-Objekt in ihrem Skript so erzeugen, dass es eine automatische Benachrichtigung (ein "Event")empfängt, sobald sich in irgendeinem der Einträge etwas ändert. Durch diese Art der Nachrichtenübermittlung eröffnen sich sehr weit reichende Einsatzmöglichkeiten. Workarounders Fähigkeiten zur Überwachung von Systemereignissen können Sie dadurch an eigene Anwendungen weitergeben. Eine detaillierte Beschreibung der Vorgehensweise würde hier zu weit führen, nähere Angaben finden Sie aber in der Hilfe. Bei Interesse sollten sie sich insbesondere auch die Skripte und das Word-Dokument im Unterverzeichnis Demo Skripte\Events anschauen und ausprobieren, lesen Sie aber zuvor bitte den nachfolgenden Hinweis. Mit dieser Art der Nachrichtenübermittlung bringen Sie nämlich die beteiligten Anwendungen in ein enges Abhängigkeitsverhältnis, so dass ein Programmierfehler in einer Anwendung auch die Funktionsfähigkeit der andern Anwendung oder gar die Stabilität des gesamten Systems beeinträchtigen kann. Hinweis 3: zum Troubleshooting in schwierigen FällenIn seltenen Fällen kann es einmal vorkommen, dass Sie das Workarounder-Hauptfenster nicht öffnen bzw. das Programm nicht beenden können.
Falls gerade ein Skript aktiv ist, werden Sie in dieser Anzeige den Prozess des Scripting Hosts finden (und zwar mehrfach, falls mehrere Skripte aktiv sind). Die Namen der entsprechenden Prozesse sind wscript.exe oder cscript.exe. Besteht das Problem weiter fort, beenden Sie anschließend den Hauptprozess von Workarounder, indem Sie den Eintrag namens Workarounder.ex (oder Workarounder.exe) markieren und die Prozess-beenden-Schaltfläche betätigen. Übrigens kann allein schon das Aufrufen des Task Managers ohne weitere Aktivitäten manche Probleme lösen: Wenn Sie ein Skript erstellen (oder ein solches Beispielskript verwenden), das wie oben gezeigt, die Tastatureingabe blockiert, dann können Sie diese Blockierung immer mit der Kombination Strg+Alt+Entf aufheben. Wenn beim erneuten Start von Workarounder das Problem fortbesteht, weil das fehlerhafte Skript gleich wieder automatisch neu ausgelöst wird, sollten Sie Workarounder erneut beenden und das Skript umbenennen. Nötigenfalls müssen Sie Ihr System zwischendurch neu starten, um dies tun zu können. Im Unterverzeichnis "Allgemeine Daten" oder "Benutzer- & PC-Daten" des Installationsverzeichnisses finden Sie übrigens auch die Datenbank mit den Ereignisdatensätzen. Dass dies eine gewöhnliche Access-Datenbank ist, die Sie mit dem entsprechenden Programm editieren können, wollen wir fortgeschrittenen Anwendern nicht vorenthalten. Sie sollten dabei aber sehr umsichtig vorgehen und auf jeden Fall vorher eine Sicherheitskopie anlegen. Sie können in der Datenbank einzelne Ereignisdatensätze deaktivieren. (Das entsprechende Feld lautet "Aktiv" und befindet sich in der Tabelle "TEvents".) Eine wirksame Aktivierung von Datensätzen ist aus Sicherheitsgründen jedoch nur innerhalb von Workarounder möglich. Dass es nach unsachgemäßer Manipulation der Datenbank zu Fehlfunktionen kommen kann und dass Sie dies auf eigenes Risiko tun, sollte Ihnen natürlich klar sein. Im letzten und abschließenden Kapitel dieses Tutorials erfahren Sie, welche weiteren Tools wir Ihnen für ein fortgeschrittenes Arbeiten mit Skripten empfehlen und wie Sie diese Tools oder Zubehör Ihrer Wahl in Workarounder integrieren können. |
|||
|
|
Copyright(c) 2007
Uta Nerger. Alle Rechte vorbehalten. |
|
|