Tales from the Script

März 2005

Veröffentlicht: 25. Feb 2005
SG090301

von The Scripting Guys

Alle auf Deutsch verfügbaren "Tales from the Script"-Kolumnen finden Sie hier.

*

Dsofile: Die unendliche Geschichte

Als wir mit Tales from the Script angefangen haben, haben wir uns selbst als die fleißigsten Journalisten der Scripting-Welt gesehen. Wir haben uns vorgestellt, die Artikel dieser Kolumne würden unsere Leser durch packende Hintergrundberichte fesseln, die so nur von den Microsoft Scripting Guys kommen können. Unser größtes Problem würde dabei sein, wie wir die Mitglieder der Pulitzer-Preis-Jury wohl am unauffälligsten auf Folgendes hinweisen könnten: „Leute, wir verdienen es zwar, aber wir gewinnen den Preis jedes Jahr. Vielleicht sollte ausnahmsweise mal jemand anderes gewinnen? Gibt es da nicht zum Beispiel eine große Zeitung in New York? Vielleicht könnt ihr die mal gewinnen lassen?“.

Wie sich herausstellte, liefen die Dinge nicht genau nach Plan. Es ist nicht so, dass wir von Tales from the Script enttäuscht wären - wir denken schon, dass unsere kleine Kolumne einer Menge Leute dabei geholfen hat, die grundsätzliche Angst vor Skripting zu überwinden, und gezeigt hat, dass Windows-Skripting nicht schwerer ist als die entsprechenden GUI-Tools zu verwenden (manchmal sogar einfacher). Das freut uns sehr. Trotzdem wäre es nett, die Redaktionskonferenz der New York Times um einen Tisch sitzen zu sehen und jemanden sagen zu hören: „Schon wieder von den Scripting Guys geschlagen. Sie sind einfach besser als wir - wir werden den Pulitzer-Preis nie gewinnen“.

Im Moment sieht es allerdings eher so aus, als würde sich die New York Times keine Sorgen wegen uns machen.

Geständnis: O.K., es könnte sein, dass wir teilweise selbst daran schuld sind, da wir eine unserer letzten Kolumnen mit Das Windows XP Service Pack 2 hat meine Computer verschwinden lassen überschrieben haben (was nicht unbedingt nach „Pulitzer-Preis-Gewinner“ schreit).

Diesen Monat sieht es allerdings anders aus. In der März-Kolumne verschwindet nichts. Stattdessen haben wir wirklich umwerfende Neuigkeiten (einen Artikel, den sie so nirgendwo anders finden werden - zumindest nicht, wenn Sie nicht Google bemühen). Diesen Monat präsentieren wir: Dsofile - Die unendliche Geschichte.

Was das für ein Angstschrei war, den Sie gerade gehört haben? Möglicherweise jemand aus der Redaktionskonferenz der New York Times. Entweder das, oder Peter Costantini von den Scripting Guys hat gerade festgestellt, dass es seinen Lieblingskuchen nicht mehr in der Microsoft-Cafeteria gibt.

Zum SeitenanfangZum Seitenanfang

Was ist Dsofile?

Dsofile ist ein Dateiname (Dsofile.dll) aus dem Download „Microsoft Developer Support OLE File Property Reader 2.0 Sample“. (Sie müssen zugeben, Microsoft hat es wirklich heraus, sich einprägsame Namen zu auszudenken.) Lassen Sie sich nicht vom Namen abschrecken. Dsofile (Sie finden den Download übrigens im Microsoft Download Center) ist wirklich ein unglaublich nützliches Tool für Skriptautoren: Es ermöglicht Ihnen, auf einfache Art und Weise die Dateiinformationen von Dateien auszulesen oder zu schreiben.

Ihre erste Reaktion auf diese Eröffnung ist wahrscheinlich: „Unglaublich. Warum habt ihr uns das nicht schon längst gezeigt?“. Ihre zweite Reaktion ist wohl: „Äh, was für Dateiinformationen?“. Wenn Ihnen nicht ganz klar ist, was wir mit „Dateiinformationen“ einer Datei meinen, dann machen Sie Folgendes: Öffnen Sie den Windows-Explorer oder den Arbeitsplatz und suchen Sie sich eine beliebige Datei (am besten eine Office-Datei). Klicken Sie mit rechts auf die Datei und klicken Sie auf Eigenschaften. Wählen Sie die Registerkarte Dateiinfo aus. Nun sollten Sie ungefähr das gleiche wie wir in der folgenden Abbildung sehen (wenn nicht, dann klicken Sie auf den Schalter Erweitert).

Summary Properties

Diese Dateiinformationen meinen wir. Wie Sie sehen können, ist dort einen Menge an Platz, um nützliche Metadaten für eine Datei zu speichern. Und noch wichtiger: Sie können die vorhandenen Metadaten verwenden. Wenn Sie zum Beispiel fleißig Sachen wie Thema, Kategorie und Stichwörter eintragen, dann können Sie Dateien über zielgerichtetes Suchen schnell und einfach wieder finden. Wie Sie unten sehen, können Sie mit dem Befehl Dateisuche in Microsoft Office auf Basis dieser Dateiinformationen nach Dokumenten suchen. Auch das neue MSN-Suchtool nutzt diese Eigenschaften.

Summary Properties

Das sind genau die Informationen, mit denen Skriptentwickler arbeiten möchten. Wir bekommen Tonnen von Briefen von Leuten, die uns fragen, wie sie in Skripts auf Dateiinformationen zugreifen können und wie sie diese über Skripte konfigurieren können. Bis jetzt ist das mit den über das Betriebssystem zur Verfügung gestellten Skripting-Möglichkeiten nicht machbar. Mit dem Shell-Objekt kann man zwar einige dieser Informationen auslesen, aber sie nicht bearbeiten. Dies können weder der Windows Script Host, das FSO-Objekt, WMI noch irgendeine andere Komponente des Betriebssystems. Es gibt also nützliche Informationen da draußen – und keine Möglichkeit, mit ihnen zu arbeiten.

Hier kommt Dsofile ins Spiel. Dsofile wurde dazu entwickelt, Skriptautoren einen Zugriff auf die Dateiinformationen zu ermöglichen. Es stellt Eigenschaften zur Verfügung, die den Dateiinformationen-Eigenschaften der Microsoft Office-Dokumente entsprechen (nicht wirklich überraschend, da Dsofile vom Office-Team entwickelt wurde). Mit Dsofile können Sie die folgenden Eigenschaften abfragen:

ApplicationName

Author

ByteCount

Category

CharacterCount

CharacterCountWithSpaces

Comments

Company

DateCreated

DateLastPrinted

DateLastSaved

HiddenSlideCount

Keywords

LastSavedBy

LineCount

Manager

MultimediaClipCount

NoteCount

PageCount

ParagraphCount

PresentationFormat

RevisionNumber

SharedDocument

SlideCount

Subject

Template

Title

TotalEditTime

Version

WordCount

Wie gesagt, es handelt sich um Eigenschaften von Microsoft Office-Dokumenten. Dsofile ist jedoch nicht auf diese Dateien beschränkt. Sie können auch andere Dateiformate abfragen - zum Beispiel .vbs- oder .mp3-Dateien. Die einzige Einschränkung ist, dass Dsofile nur die oben genannten Eigenschaften für diese Dateien abfragen kann. JPG-Dateien haben zum Beispiel Eigenschaften wie Breite, Höhe und Farbqualität. Auf diese Eigenschaften können Sie mit Dsofile nicht zugreifen.

Zum SeitenanfangZum Seitenanfang

Moment mal: Dsofile ist doch nicht neu

Einige Skeptiker unter Ihnen mögen nun einwenden: „Moment - das sind alte Kamellen. Dsofile gibt es schon seit Jahren“. Tja, das stimmt natürlich. Nicht nur, dass es Dsofile schon seit Jahren gibt, wir haben auch schon einige Beispielskripte im Script Center zu diesem Thema gebracht. Im Dezember wurde jedoch stillschweigend eine neue Version von Dsofile veröffentlicht. Und darum beschäftigen wir uns in dieser Kolumne damit. Bevor Sie fragen: Die neue Version von Dsofile wurde für die Verwendung mit .NET-Programmiersprachen entworfen, und so weit wir wissen, gibt es keine Features, die nicht schon in der alten Version vorhanden waren.

Ein Unterschied zwischen der alten und neuen Version sind jedoch die Skripte, die Dsofile nutzen. Nehmen wir einmal an, Sie verwenden die alte Version, laden sich die neue Version herunter und installieren sie. In diesem Fall werden ihre alten Dsofile-Skripte nicht mehr funktionieren. Das liegt daran, dass einige Änderungen im Skript-Code erforderlich sind.

Es folgt ein Skript, das den Namen des Autors mit Hilfe der alten Version von Dsofile abfragt:

Set objPropertyReader = CreateObject("DSOleFile.PropertyReader")
Set objDocument = objPropertyReader.GetDocumentProperties _
    ("C:\Scripts\New_users.xls")
Wscript.Echo "Autor: " & objDocument.Author


Set objFile = CreateObject("DSOFile.OleDocumentProperties")
objFile.Open("C:\Scripts\New_users.xls")
Wscript.Echo "Autor: " & objFile.SummaryProperties.Author

Und das folgende Skript macht das gleiche mit der neuen Version von Dsofile:

Set objFile = CreateObject("DSOFile.OleDocumentProperties")
objFile.Open("C:\Scripts\New_users.xls")
Wscript.Echo "Autor: " & objFile.SummaryProperties.Author

Wie Sie sehen, geben beide Skripte den Autor zurück - das sind aber auch schon alle Gemeinsamkeiten. Sogar die ProgIds – DSOleFile.PropertyReader und DSOFile.OleDocumentProperties – sind unterschiedlich. Unglücklicherweise hilft die mit Dsofile zur Verfügung gestellte minimale Dokumentation auch nicht wirklich weiter. Wenn Sie nicht aufpassen, dann installieren Sie möglicherweise einfach die neue Version (so, wie mindestens einer aus dem Scripting Guys-Team) und verbringen die nächsten Stunden damit herauszufinden, warum Ihre Skripte nicht mehr funktionieren.

Diejenigen unter Ihnen, die echte Skeptiker sind, denken vielleicht: „Kein Problem - erstelle ich einfach eine Instanz einer Office-Anwendung und habe die gleichen Informationen“. Ja, das könnten Sie machen - der Nutzen von Dsofile liegt jedoch nicht darin, Informationen auszulesen, die auf andere Arten nicht erlangt werden können. Der tatsächliche Wert von Dsofile liegt stattdessen darin, dass es eben nur diese eine Sache macht. Mit Dsofile ist die Abfrage der entsprechenden Informationen deutlich schneller, als wenn Sie Microsoft Office verwenden. Das liegt ganz einfach daran, dass Sie eben keine Instanz von Word oder Excel erstellen müssen, um nur eben den Autor eines Dokuments abzufragen. Mit Dsofile erhalten Sie die gleiche Information schneller und einfacher - und ohne den Overhead einer Office-Anwendung. Das macht Dsofile zu so einem nützlichen Tool.

Zum SeitenanfangZum Seitenanfang

O.K., aber wie verwende ich Dsofile?

Gute Frage. Wenn wir uns dieses Jahr Hoffnungen auf den Pulitzer-Preis machen wollten, dann könnte es helfen, wenn wir Ihnen etwas Code präsentieren (außerdem würde es natürlich auch helfen, wenn es tatsächlich einen Pulitzer-Preis für die Kategorie Skripting geben würde). Werfen wir also einen genaueren Blick auf das Skript, das uns den Autor eines Dokuments zurückgibt:

Set objFile = CreateObject("DSOFile.OleDocumentProperties")
objFile.Open("C:\Scripts\New_users.xls")
Wscript.Echo "Autor: " & objFile.SummaryProperties.Author

Wie Sie sehen, fangen wir damit an, eine Instanz des Objekts DSOFile.OleDocumentProperties zu erstellen. Dann verwenden wir die Methode Open, um die Datei zu „öffnen“. (Wir schreiben das in Anführungsstriche, da wir die Datei nicht im Sinne von „Starten einer Anwendung wie Microsoft Excel und Laden des Dokumentes“ öffnen. Stattdessen erstellen wir nur eine Bindung an die Metadaten aus den Dateiinformationen der Datei.)

Danach geben wir einfach nur die Werte der benötigten Eigenschaft aus. Keine Überraschungen so weit - die einzige Sache, auf die wir achten müssen, ist die Tatsache, dass wir das SummaryProperties-Objekt referenzieren müssen. Daher verwenden wird objFile.SummaryProperties.Author statt objFile.Author. Das ist aber auch schon alles. Es gibt keine Arrays, keine Typisierungen etc. - nichts von dem, für das wir alle das Skripting so … lieben.

Es folgt ein komplexeres Skript, das alle Informationen der Datei C:\Scripts\New_users.xls abfragt. Eine weitere nette Sache an Dsofile: Wenn Sie versuchen, eine Eigenschaft für eine Datei abzufragen, die für die Datei nicht existiert (z. B. SlideCount bei Word-Dokumenten), dann wird kein Fehler produziert. Stattdessen erhalten Sie einfach Null zurück (oder im Fall von numerischen Eigenschaften die Zahl 0). Das Skript arbeitet dann einfach weiter. Dies gilt auch für den Fall, dass Sie Textdateien, Windows Media-Dateien oder Nicht-Microsoft-Office-Dokumente abfragen.

Set objFile = CreateObject("DSOFile.OleDocumentProperties")
objFile.Open("C:\Scripts\New_users.xls")

Wscript.Echo "Anwendungsnamee: " & objFile.SummaryProperties.ApplicationName
Wscript.Echo "Autor: " & objFile.SummaryProperties.Author
Wscript.Echo "Byte-Count: " & objFile.SummaryProperties.ByteCount
Wscript.Echo "Kategorie: " & objFile.SummaryProperties.Category
Wscript.Echo "Zeichen: " & objFile.SummaryProperties.CharacterCount
Wscript.Echo "Zeichen inkl. Leerzeichen: " & objFile.SummaryProperties.CharacterCountWithSpaces
Wscript.Echo "Bemerkungen: " & objFile.SummaryProperties.Comments
Wscript.Echo "Firma: " & objFile.SummaryProperties.Company
Wscript.Echo "Erstellungdatum: " & objFile.SummaryProperties.DateCreated
Wscript.Echo "Letzter Druck: " & objFile.SummaryProperties.DateLastPrinted
Wscript.Echo "Letzte Speicherung: " & objFile.SummaryProperties.DateLastSaved
Wscript.Echo "Versteckte Folien: " & objFile.SummaryProperties.HiddenSlideCount
Wscript.Echo "Stichwörter: " & objFile.SummaryProperties.Keywords
Wscript.Echo "Zuletzt gespeichert von: " & objFile.SummaryProperties.LastSavedBy
Wscript.Echo "Zeilen: " & objFile.SummaryProperties.LineCount
Wscript.Echo "Manager: " & objFile.SummaryProperties.Manager
Wscript.Echo "Multimedia-Clips: " & objFile.SummaryProperties.MultimediaClipCount
Wscript.Echo "Kommentare: " & objFile.SummaryProperties.NoteCount
Wscript.Echo "Seiten: " & objFile.SummaryProperties.PageCount
Wscript.Echo "Absätze: " & objFile.SummaryProperties.ParagraphCount
Wscript.Echo "Präsentationsformat: " & objFile.SummaryProperties.PresentationFormat
Wscript.Echo "Revisionsnummer: " & objFile.SummaryProperties.RevisionNumber
Wscript.Echo "Freigeben: " & objFile.SummaryProperties.SharedDocument
Wscript.Echo "Folienzahl: " & objFile.SummaryProperties.SlideCount
Wscript.Echo "Thema: " & objFile.SummaryProperties.Subject
Wscript.Echo "Vorlage: " & objFile.SummaryProperties.Template
Wscript.Echo "Titel: " & objFile.SummaryProperties.Title
Wscript.Echo "Gesamte Bearbeitungszeit: " & objFile.SummaryProperties.TotalEditTime
Wscript.Echo "Version: " & objFile.SummaryProperties.Version
Wscript.Echo "Wörter: " & objFile.SummaryProperties.WordCount

Die Abfrage von Dateiinformationen ist natürlich nur die Hälfte des Weges. Als Skriptautor möchten Sie sicher auch in der Lage sein, diese Eigenschaften zu ändern. Sie haben Glück. Sie möchten einem Dokument einen Titel zuweisen? Ihr Skript müsste ungefähr so aussehen:

Set objFile = CreateObject("DSOFile.OleDocumentProperties")
objFile.Open("C:\Scripts\New_users.xls")

objFile.SummaryProperties.Title = "Neuer Titel mit über ein Skript"
objFile.Save

Auch hier erstellen wir wieder eine Instanz des OleDocumentProperties-Objekts und rufen die Methode Open auf. Dann weisen wir SummaryProperties.Title den Wert Neuer Titel mit über ein Skript zu, und rufen die Methode Save auf. Das ist alles. Wenn wir den Titel löschen möchten, weisen wir der Eigenschaft einfach einen leeren String zu:

Set objFile = CreateObject("DSOFile.OleDocumentProperties")
objFile.Open("C:\Scripts\New_users.xls")

objFile.SummaryProperties.Title = ""
objFile.Save

Ein Nachteil von Dsofile ist, dass Sie die Dateiinformationen nur für Microsoft Office-Dokumente schreiben können. Wenn Sie beispielsweise versuchen, einer Textdatei einen Titel zuzuweisen, dann schlägt dies fehl. Außerdem sollten Sie wissen, dass nicht alle Eigenschaften schreibbar sind. Sie können zwar den Titel über Dsofile ändern, nicht jedoch - aus unerfindlichen Gründen - die Eigenschaften ByteCount oder DateCreated.

Zum SeitenanfangZum Seitenanfang

Das ist noch nicht alles

Ein typischer Skripting-Journalist - einer von diesen, der für alle großen Skripting-New-Organisationen arbeitet - würde an diesem Punkt wahrscheinlich mit seinen Ausführungen abschließen (in dem festen Glauben, dass er Ihnen alles wissenswerte über Dsofile mitgeteilt hat). Aber glauben Sie wirklich, dass die Scripting Guys so einfach aufgeben?

Tja, tatsächlich ist das der Fall. Aber unser Lektor hat gesagt: „Ähm, was ist mit den benutzerdefinierten Dokumenteigenschaften? Denkt ihr nicht, dass sich die Leute für diese interessieren?“. Und da er fast 4 Meter groß ist und Feuer mit seinen Augen verschießt, haben wir gesagt: „Sicher, wenn Sie es sagen.“ (Wenn er den Teil über seine Größe und das Feuer nicht aus dem Text löscht, dann muss wohl etwas Wahres dran sein).

Also, wie ist das mit den benutzerdefinierten Dokumenteigenschaften? Wie wir bereits gezeigt haben, gibt es ein paar Dutzend Standard-Dokumenteigenschaften. Was aber, wenn diese Eigenschaften ihre Bedürfnisse nicht erfüllen? Kein Problem. Sie können Microsoft Office-Dokumenten Ihre eigenen Eigenschaften hinzufügen.

Nehmen wir zum Beispiel einmal an, Sie möchten festhalten, wann das Dokument das letzte Mal angezeigt wurde. Standardmäßig gibt es keine Eigenschaft wie Letztes Anzeigedatum. Daher erstellen wir einfach unser eigenes:

Const msoPropertyTypeDate = 3

Set objFile = CreateObject("DSOFile.OleDocumentProperties")
objFile.Open("C:\Scripts\New_users.xls")

objFile.CustomProperties.Add "Letztes Anzeigedatum", msoPropertyTypeDate 
objFile.Save

In diesem Skript beginnen wir, indem wir eine Konstante mit dem Namen msoPropertyTypeDate definieren und ihr den Wert 3 zuweisen. Das bedeutet für Dsofile, dass unsere benutzerdefinierte Eigenschaft ein Datum-Feld sein soll. Die folgenden Typen sind hierbei möglich:

Konstante blabalDatentypWert

msoPropertyTypeNumber

Zahl

1

msoPropertyTypeBoolean

Boolean (Ja/Nein)

2

msoPropertyTypeDate

Datum

3

msoPropertyTypeString

String

4

Mit anderen Worten: Wenn wir eine Eigenschaft Review hinzufügen möchten, in der einfach festgehalten wird, ob das Dokument schon einen Review durchlaufen hat, verwenden wir eine Boolean-Eigenschaft:

Const msoPropertyTypeBoolean = 2

Set objFile = CreateObject("DSOFile.OleDocumentProperties")
objFile.Open("C:\Scripts\New_users.xls")

objFile.CustomProperties.Add "Review", msoPropertyTypeBoolean
objFile.Save

Aber zurück zur „Letztes Anzeigedatum“-Eigenschaft. Wir erstellen also eine Bindung an das Dokument, greifen auf die CustomProperties-Collection zu und rufen die Methode Add auf. Ihr geben wir zwei Parameter mit: den Namen unserer neuen Eigenschaft (Letztes Anzeigedatum) und den Datentyp (msoPropertyTypeDate). Dann rufen wir die Methode Save auf und speichern die neue Eigenschaft in der CustomProperties-Collection.

Mit diesem Skript richten wir also eine Eigenschaft ein, in der Informationen gespeichert werden können. Standardmäßig ist dort jedoch nichts gespeichert. Außerdem wird die neue Eigenschaft nicht im Eigenschaften-Dialogfenster angezeigt - zumindest so lange nicht, bis ihr ein Wert zugewiesen wurde. Wir zeigen Ihnen also besser, wie Sie eine Eigenschaft zuweisen:

Set objFile = CreateObject("DSOFile.OleDocumentProperties")
objFile.Open("C:\Scripts\New_users.xls")

Set objProperty = objFile.CustomProperties.Item("Letztes Anzeigedatum ")
objProperty.Value = #2/16/2005#
objFile.Save

Wir beginnen mit dem Binden an die Datei C:\Scripts\New_users.xls. Dann erstellen wir eine Referenz auf unsere neue Eigenschaft:

Set objProperty = objFile.CustomProperties.Item("Date Reviewed")

Wir weisen der Eigenschaft Value einen Wert zu und rufen die Methode Save auf. Das ist alles. Jetzt hat die Eigenschaft den Wert 2/16/2005. Im Dialogfenster sollte das nun ungefähr so aussehen:

Summary Properties

Die beiden Rauten um das Datum zeigen unter VBScript an, dass es sich um ein Datum und nicht um einen String oder einen Ausdruck handelt (z. B. 2 geteilt durch 16 geteilt durch 2005).

Sie haben Recht: Das sieht mehr nach einem Nobelpreis als nach einem Pulitzer-Preis aus. Aber es wird noch besser. (Wenn Sie sich fragen, was besser als das Gewinnen des Nobelpreises sein kann, dann haben Sie noch nicht besonders viel über Dsofile nachgedacht, stimmts?) Sie müssen die benutzerdefinierten Eigenschaften nicht über den Windows-Explorer abfragen. Stattdessen können Sie einfach ein Skript wie das folgende verwenden:

Set objFile = CreateObject("DSOFile.OleDocumentProperties")
objFile.Open("C:\Scripts\New_users.xls")

For Each objProperty in objFile.CustomProperties
    Wscript.Echo objProperty.Name, objProperty.Value
Next

Da es sich bei CustomProperties um eine Collection handelt, können wir sie einfach mit einer For/Each-Schleife durchlaufen und jedes Element mit seinem Namen und dem Wert ausgeben. Einfach, was?

Und was, wenn Sie die benutzerdefinierte Eigenschaft wieder loswerden möchten? Erstellen Sie einfach eine Bindung an das Objekt, erstellen Sie eine Objektreferenz für die Eigenschaft, die Sie löschen möchten, und rufen Sie die Methode Remove auf:

Set objFile = CreateObject("DSOFile.OleDocumentProperties")
objFile.Open("C:\Scripts\New_users.xls")

Set objProperty = objFile.CustomProperties.Item("Letztes Anzeigedatum")
objProperty.Remove
objFile.Save

Stellen Sie auch hier sicher, dass die Änderungen mit der Methode Save auch tatsächlich gespeichert werden.

Zum SeitenanfangZum Seitenanfang

Wir möchten dem Pulitzer-Preis-Komitee danken …

… aber wir tun es nicht. Und zwar, weil sie uns bis jetzt noch nicht mit dem Pulitzer-Preis ausgezeichnet haben. Wir hoffen allerdings, dass Dsofile für Sie von Nutzen ist. Wir haben versucht, Ihren Horizont im Bezug auf Skripting etwas zu erweitern. Wie Sie sich vielleicht erinnern, haben wir letzten Monat das Tool Log Parser vorgestellt - ein weiteres Tool, das nicht zum Betriebssystem gehört, aber sehr nützlich für Skriptautoren ist. Versuchen Sie es also mit Dsofile, und lassen Sie uns wissen, was Sie darüber denken (wie immer können Sie uns unter scripter@microsoft.com schreiben - jedoch nur in englischer Sprache).

Wenn Sie Dsofile nützlich finden, dann könnten Sie vielleicht so freundlich sein und bei Ihrem nächsten Gespräch mit einem Mitglied des Pulitzer-Preis-Kommitees die Scripting Guys zur Sprache bringen. Wir müssen ja schließlich irgendwas mit den Smokings anfangen, die wir uns etwas voreilig gekauft haben.

Zum SeitenanfangZum Seitenanfang

Zusätzliche Informationen

Alle "Tales from the Script"-Kolumnen


Zum SeitenanfangZum Seitenanfang