Tutorial - 5
Übersicht 
Anwendung 
Referenzen 
Bestellung 
Download 
Kontakt 
Links 

 

Worum geht es?

Bis heute ist sie eine der genialsten Erfindungen von Microsoft: die Zwischenablage.
Erlaubt sie doch die einfache Wiederverwendung von einmal erstellten Arbeitsergebnissen in neuen Dokumenten.
Ihr massiver Einsatz führt jedoch immer wieder zu Problemen oder der Notwendigkeit von manueller Nacharbeit. Beim Transfer von Inhalten aus einem bestimmten Dokumententyp in einen anderen müssen oft  immer gleiche Optionen beim Einfügen ausgewählt oder nachträgliche Konvertierungen vorgenommen werden z.B.:

  • Auswahl eines bestimmten Formats beim Einfügen von Grafiken,
  • Inhalte gezielt als Text (oder eben als Zahl) einfügen in Excel,
  • Dezimal-Trennzeichen von Komma auf Punkt umwandeln beim Austausch von Zahlenmaterial mit englischsprachiger Software (z. B. Mathcad)

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.
Im zweiten Schritt machen wir diese Lösung dann "intelligenter", so dass man sie als Ausgangspunkt für eigene Entwicklungen  auch in sehr speziellen Anwendungsfällen verwenden kann.
Dabei werden wir auch das "Innenleben" der Skripte und die Verwendung von Automatisierungsobjekten näher beleuchten. Außerdem werden noch einige abschließende Hinweise zum "Troubleshooting" und zur Handhabung von Ereignisdatensätzen im Hauptfenster von Workarounder gegeben.

Übung 5: Inhalt der Zwischenablage beim Einfügen verändern

Erstellen Sie in der Registerkarte "Tastatur" des Workarounder-Hauptfensters den nachfolgend abgebildeten Datensatz:
 

   

 


Falls Sie Microsoft Word nicht verwenden möchten, können Sie diese Übung zum Beispiel auch mit WordPad durchführen.
Falls bei Ihnen noch nicht durch Windows belegt, können Sie z.B. auch Win+v zur Auslösung der Aktion verwenden.
Sinnvoll ist es auf jeden Fall, nur ein Fragment des Fenstertitels anzugeben, welches den Namen des aktiven Dokuments nicht enthält. Dadurch funktioniert das Ganze auch mit anderen Dokumenten.

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:
 

   

 


Mit dem neuen Tastenkürzel haben Sie nun unter Word die Möglichkeit, Texte völlig unformatiert einzufügen, ohne sich durch umständliche Menüs arbeiten zu müssen. Wenn Sie den Datensatz entsprechend anpassen, funktioniert das verwendete Skript übrigens auch für alle anderen Programme, in denen Sie mit der Tastenkombination Strg+v aus der Zwischenablage einfügen können.

Erläuterung und Weiterentwicklung des verwendeten Skripts

Lieber Leser,
wenn Sie uns bis jetzt durch dieses Tutorial gefolgt sind, verfügen Sie bereits über die Grundlagen, um die Bedienung von Windows-Anwendungen durch automatische Maus- oder Tastaturaktionen zu beschleunigen und Sie kennen sich mit den wesentlichen Merkmalen der Benutzeroberfläche von Workarounder aus.

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.
Damit möchten wir Anwendern, die auch sehr spezielle oder umfangreichere Lösungswege mit Workarounder umsetzen möchten, wichtige Anhaltspunkte für Eigenentwicklungen oder die Weiterentwicklung der beiliegenden Skripte geben.

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.
Sie können aber auch anhand der nachfolgenden Überschriften "quer lesen" und die Hinweise vertiefen, die Sie besonders interessieren.
Wenn das Thema VisualBasic-Skripte noch Neuland für Sie ist, und Sie sich jetzt oder später einarbeiten  wollen: Hier gibt es ein Einführungskapitel aus "Scripting für Adminstratoren" von Dr. Tobias Weltner.
Es wendet sich zwar an Profis, die "VB Script Guerilla Session" ab Seite 17 ist jedoch recht allgemeinverständlich gelungen. (Also nicht vom Vorspann abschrecken lassen, sondern bei Bedarf direkt ab Seite 17 unten lesen.)

Funktion des Beispielskripts DefPasteClipboard.vbs

Die Funktion des oben verwendeten Skriptes lässt sich anhand seines nachfolgend abgebildeten Quelltextes leicht erklären.
(Für eine übersichtlichere Darstellung haben wir hier  Notepad++ verwendet. Wie Sie diese clevere Alternative zum Windows Editor installieren und nutzen, erfahren Sie übrigens in der nächsten Übung.)
 

   

 


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.
Dies hört sich wesentlich komplizierter an, als es in der Praxis ist: Sie verwenden einfach immer diese Standard-Zeile, um eine Reihe von zusätzlichen Befehlen (siehe Kap. 4.3.1 in der Hilfe) in VisualBasic-Skripten verfügbar zu machen.
Diese Befehle werden dann mit einem vorangestellten "tools." aufgerufen.

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.
In der Folgezeile schreiben wir diesen Text zurück in die Zwischenablage. Alle zusätzlich in der Zwischenablage vorhandenen Informationen (eventuelle Grafiken oder Formatinformationen usw.) werden dabei gelöscht.

Anschließend wird der Inhalt der Zwischenablage mit der Tastenkombination Strg+v wieder in die Anwendung eingefügt.
Wurde zum Auslösen des Skriptes eine Tastenkombination benutzt, so ist bei diesem Vorgang wahrscheinlich immer noch eine Taste gedrückt. Vor der automatischen Tastaturausgabe wird daher die echte Tastatur blockiert und zurückgesetzt.

Die letzte Zeile hebt diese Blockierung wieder auf und zeigt übrigens einen vollständigen Aufruf einer so genannten "Funktion" eines Objektes.
Eine Funktion kann nämlich einen Rückgabewert liefern, der hier in der Variable r gespeichert wird. Nutzt man dies, so sind eventuelle Parameter der Funktion (in diesem Fall der Wert false) in Klammern nachzustellen.

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
z. B. eine der folgenden Operationen durchführen:

  • x= LCase(x)  ' Diese Zeile ändert  Großschreibung in Kleinschreibung
  • x= UCase(x)  ' Diese Zeile ändert  Kleinschreibung in Großschreibung
  • x= Replace(x, ".", ",")   ' Diese Zeile ersetzt Punkte durch Kommas

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 Troubleshooting

Nun 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:
Da das Skript diese auslösende Tastenkombination selbst zum Einfügen der Zwischenablage verwendet, hätten sie nämlich eine Endlosschleife erzeugt.

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ösung

Obwohl 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:

  • Wenn man die Tastenkombination Strg+Alt+v versehentlich auf eine Grafik anwendet, dann ist diese aus der Zwischenablage entfernt.
  • Man hat nicht die Möglichkeit, abwechselnd den gleichen Inhalt mit und ohne Format einzufügen, weil nach der ersten Anwendung des Skriptes die Formatierungen aus der Zwischenablage verschwinden.
  • Es wäre praktischer, wenn das ganze mit einer einheitlichen, statt mit zwei verschiedenen Tastenkombinationen funktionieren würde.

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.vbs

Versuchen 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:

  1. Ein neues Skript, das diese Information beim Kopieren in die Zwischenablage ermittelt
  2. Eine Möglichkeit, die Information zu speichern
  3. Eine Erweiterung des bereits vorgestellte Skripts, damit diese Information berücksichtigt wird.

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.
Die Rede ist vom FlexiDict-Objekt, das wie eine Art Briefkasten mit mehreren Fächern funktioniert. Eine Anwendung oder ein Skript kann dort etwas hinein legen und eine andere Anwendung kann zu einem späteren Zeitpunkt die abgelegte Information dort auslesen.
Eine Kopie dieses Objektes erzeugen wir in unserem weiterentwickelten Skript in Zeile 32, die Zeilen 31, 44, 45 und 46 kennen Sie so oder ähnlich bereits aus der Vorgängerversion:

   

 


Die wesentlichen Veränderungen im neuen Skript sind offensichtlich die Zeilen 35 bis 40 und die benutzerdefinierten Variablen im obersten Abschnitt.
Einen solchen Abschnitt mit benutzerdefinierten Variablen finden Sie in vielen der beiliegenden Beispielskripte. Viele Dinge, die man am Verhalten des Skriptes auf einfache Weise ändern kann, lassen sich über diese Variablen steuern.
Im einzelnen bedeuten die Variablen:

  • Der Variable SourceApp1 wird in Zeile 18 ein willkürlich gewähltes Schlüsselwort zugewiesen, mit dem identifiziert werden kann, aus welcher Quell-Anwendung der Inhalt der Zwischenablage kommt.
  • Die Variable InsertUnformatKeys (Zeile 21) speichert Steuerzeichen für eine Tastaturausgabe. Mit dieser Tastaturausgabe kann in Word der Dialog "Inhalte einfügen" aufgerufen und der Inhalt der Zwischenablage als unformatierter Text eingefügt werden.
  • In Zeile 25 werden solche Steuerzeichen für ein normales Einfügen über das Bearbeiten-Menü angegeben. Da diese Zeichenfolgen einen Textausdruck (und nicht etwa ein Variablennamen) darstellen, müssen sie in Anführungszeichen angegeben werden.

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.
Wenn der Inhalt dieses Eintrags unserem oben vereinbarten SchlüsselCode entspricht, dann wird die Tastenkombination zum unformatierten Einfügen in der Variable Keys zwischengespeichert und in Zeile 45 gesendet. Ansonsten kommt die Tastenkombination für normales Einfügen zur Ausführung. (Diese Wenn-Dann-Entscheidung wird über die abgebildeten  If-Then-Else-Befehle realisiert.)

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-Register

Wir 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.
Dies übernimmt das "interne Skript" >AddToDict. Bei >AddToDict handelt es sich um kein echtes Skript, sondern um eine interne Programmfunktionen von Workarounder, die Sie mit Parametern anweisen können, Einträge im FlexiDict anzulegen oder zu ändern.

In der Registerkarte "Zwischenablage" legen Sie die beiden nachfolgend abgebildeten Datensätze an.
Für den oberen dieser Datensätze geben Sie wie abgebildet, folgende Parameter ein: ClipSender|MSWord
Das |-Zeichen dient dabei zur Abtrennung von einzelnen Parametern. In diesem Fall ändert AddToDict den Wert im Eintrag "ClipSender" auf "MSWord". Ist der Eintrag noch nicht vorhanden, wird er neu angelegt.
Der untere Datensatz erhält einfach nur den folgenden Parameter: ClipSender
Dies bewirkt, dass der Eintrag ClipSender auf einen leeren Wert gesetzt wird.
 

   

 


Entscheidend für die korrekte Funktion ist hier die richtige Einstellung der Kontrollkästchen in dem mittleren Spalte der Datensätze.
Hierzu muss man wissen, dass die meisten Programme beim Kopieren in die Zwischenablage dort Inhalt in mehreren Formaten gleichzeitig ablegen. Mithilfe der Kontrollkästchen kann man festlegen, dass die Aktion nur dann ausgelöst werden soll, wenn eine bestimmte Kombination von Formaten in der Zwischenablage abgelegt wird.
Bei den hier zur Verfügung stehenden Formaten handelt es sich um Text, Pixel-, und Vektorgrafik.
Anders als gewöhnliche Kontrollkästchen können diese hier einen grau eingefärbten dritten Zustand annehmen. Dies bedeutet, dass das Vorhandensein des entsprechenden Formats in der Zwischenablage keine Rolle für die Auslösung des Ereignisses spielt.

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 Hauptfenster

Entscheidend 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.
Da die Kriterien im zweiten Datensatz bei jedem Kopieren in die Zwischenablage zutreffen, würde seine Aktion jedesmal ausgeführt, wenn er an 1. Stelle stünde. Der Datensatz, der das Schlüsselwort in das FlexiDict schreiben soll, käme somit nie zur Ausführung.
Sie haben aber die Möglichkeit, die Reihenfolge von einmal erstellten Datensätze in einer Registerkarte zu verändern: Durch Druck auf die Schaltfläche "ans Ende" wird der gerade markierte Datensatz an das Ende der Auflistung verschoben. Sie finden diese Schaltfläche als 4. von rechts im unteren Bereich des Hauptfensters (siehe vorherige Abbildung).

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:

  • Ereignis-Nr. (dies sind die grau dargestellten Zahlen links unten im Datensatz)
  • aktiviertes Fenster
  • Dateiname des Skripts 
  • Bemerkungen zum Skript (werden über den Parameter-Dialog angelegt)
  • Bemerkungen zum Ereignis (werden über den Parameter-Dialog angelegt)

Der zweite Datensatz würde z.B. ausgeblendet, wenn Sie im Filterkriterium "aktiviertes Fenster" folgenden Wert angeben: *word*
Der erste Datensatz bliebe jedoch sichtbar, weil er den Filterkriterien entspricht. Diese Kriterien berücksichtigen übrigens keine Groß-/Kleinschreibung und Sie können das *-Zeichen als Joker bzw. Wildcard verwenden.

Abändern des Datensatzes im Tastatur-Register

Damit 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.
 

   

 


Öffnen Sie dieses Skript bei Bedarf und ändern Sie im Abschnitt "Benutzerdefinierte Variablen" die Tastenkürzel so ab, dass sie auf Ihre Word-Version passen.

Möglichkeiten zur Weiterentwicklung der vorgestellten Lösung

Sie 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.
So können Sie beispielsweise festhalten und später automatisch berücksichtigen, ob:

  • Text aus Word kopiert wurde (dieses Beispiel),
  • ein Bild aus einer bestimmten Grafik-Anwendung kommt
  • oder Zahlenmaterial aus einer bestimmten Exel-Tabelle

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).
Andererseits können Sie auch mehrere Skript-Versionen für unterschiedliche Zielanwendungen schreiben und für jede dieser Anwendungen andere Regeln für das gewünschte Format beim Einfügen aus der Zwischenablage festlegen.

Falls erforderlich, können Sie also sehr spezifische Regeln für die automatische Formatauswahl beim Einfügen aus der Zwischenablage festlegen.
Im Vergleich zur ersten Lösung ist es sicherlich von Vorteil, dass die Originalformate in der Zwischenablage erhalten bleiben, so dass sich der Anwender bei Bedarf auch gegen die automatische Formatierungsregel entscheiden kann, indem er den Zwischenablageninhalt auf anderem Wege als über die Tastenkombination Strg+v einfügt.

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.
Eine entsprechende Automatisierung hilft hier Fehler zu vermeiden, die ansonsten schwer zu beheben sind und zu einer zu einer schlechten Handhabbarkeit und "Stabilität" des Dokuments führen können.

Weitere Informationen zum FlexiDict-Objekt

Die 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").
Sobald ein Fach benannt ist, können die Programme oder Skripte, die auf dem Rechner laufen, Daten über diese Ablage austauschen (was normalerweise nicht ganz so einfach ist, man spricht hier von Inter Process Communication bzw. IPC).

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.
Diese Benachrichtigung erfolgt durch Auslösung einer so genannten "Ereignisprozedur", die Sie in dem wartenden Skript erstellen und als Empfänger der Nachricht angeben müssen. Die Ereignisprozedur kann dann die Veränderung im FlexiDict gezielt auswerten und weiterverarbeiten (siehe Details in der Hilfe).

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.
Zum Beispiel könnte Workarounder bei jedem Ereignis, das er empfängt, diese Information in einen FlexiDict Eintrag schreiben. Eine andere Anwendung (etwa eine unter VBA programmierte Office-Lösung) könnte diese Ereignismeldungen dann gezielt auswerten und darauf reagieren.  
Man kann dadurch in eigene Anwendungen auf einfache Weise z. B. eine Verzeichnisüberwachung oder eine Reaktion auf Fensterwechsel einbinden. 

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.
Wenn Sie also ein FlexiDict-Objekt so definieren, dass es zum Empfänger von Ereignisnachrichten wird, sollten Sie beim Testen Ihrer Entwicklungen die Zwischenergebnisse häufig abspeichern und keinesfalls andere Dokumente geöffnet haben, deren Absturz einen Datenverlust bedeuten würde.

Hinweis 3: zum Troubleshooting in schwierigen Fällen

In seltenen Fällen kann es einmal vorkommen, dass Sie das Workarounder-Hauptfenster nicht öffnen bzw. das Programm nicht beenden können.
In so einem Fall drücken Sie die Tastenkombination Strg+Al+Entf und öffnen dann den Task-Manager. Dort wählen Sie die Registerkarte "Prozesse". Am besten lassen Sie die laufenden Prozesse nach Namen sortieren, wie nachfolgend abgebildet:

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.
Wenn es Probleme gibt, ist es meist am sinnvollsten, zunächst diese Prozesse zu beenden. Markieren und beenden sie also der Reihe nach alle Prozesse mit Namen 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.
Bei Bedarf starten Sie dann Workarounder erneut über den Eintrag im Startmenü-Ordner.

Ü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.
Dies ist dann von Bedeutung, wenn im blockierten Zustand ein Fehler auftritt und Ihr Skript mit einer Fehlermeldung anhält. Um die Fehlermeldung zu bestätigen, müssen Sie zunächst die angegebene Tastenkombinationen drücken.
Wenn Sie dies einmal ausprobieren wollen, können Sie in der ersten Skript-Variante unterhalb von Zeile 25 den folgenden (fehlerhaften) Befehl einfügen und das Skript ausführen: x=2/0
In der zweiten Skript Variante würde es übrigens durch die verwendete Fehlerbehandlung zu keinem Problem kommen.

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.

   

 

[Zurück][Nach oben][Weiter]

Copyright(c) 2007 Uta Nerger. Alle Rechte vorbehalten.