Basisprobleme zum Skripting

opi-hs

Mitglied
Dabei seit
09.02.05
Beiträge
558
Standort
Köln
#1
Hallo Skriptingspezialisten,
wie schon von anderen Wissbegierigen hier geäußert wurde, gilt auch für mich:
"learning by doing" ist eine der besten Methoden zum autodidaktischen Erlernen.

Im Zusammenhang mit der Analyse und Auswertung der Makernotes - es geht mir speziell um die Sortierung von Fotos anhand des benutzten Objetivtyps und deren gezielten Weiterverarbeitung mit einem eigens dafür erstellten VBS-Skript - gerate ich von einem Problem in das andere.

Fürs Erste hat es mich ziemlich viel "Forschungsarbeit" und "-zeit" gekostet, um herauszufinden, wo in den Makernotes zur Nikon D80 die Daten zur Beschreibung des Objektivtyps abgelegt sind. Ok, für das Auslesen der Makernotes stehen zwar in FF die integrierten Funktionen FF_GetMakernotes und FF_GetMakernotesSize zur Verfügung, die aber m.E. "nur" den Gesamtumfang der Makernotes bzw. den Inhalt lediglich Byte für Byte liefern. So wie ich das sehe, müssen zwecks Analyse der Makernotes diese Byte für Byte in ein Array eingelesen und dann in Kleinarbeit untersucht werden. Zumindest war es mir damit möglich, die zu allem Unglück auch noch verschlüsselten Daten für den Objektivtyp herauszufinden und aufzuspüren. Jetzt kann ich gezielt mit FF_GetMakernotes die wenigen Bytes lesen, um den Objektivtyp eindeutig zu erkennen und danach die weitere Sortierung der Fotos vornehmen.

Sehr hilfreich wäre für mich (auch für evtl. weitere Analysen) eine Übersicht, wo und wie beispielsweise die Nikon Makernotes in der Bilddatei abgelgt bzw. verschlüsselt sind. Kann jemand mit einer solchen Übersicht oder mit einem entsprechenden Verweis weiterhelfen? Nach meinen Recherchen scheint dies ein Buch mit sieben Siegeln zu sein.

Bei der Analyse der ausgelesenen Makernotes-Bytes trat für mich dann die Notwendigkeit auf, den Array-Inhalt in entsprechenden Hexstrings lesbar auszugeben. Das funktionierte auch bis zu einem gewissen Grade schön formatiert in der Methode MsgBox. Doch beim weiteren Ausbau stieß ich dann an deren Grenze, dass Strings nur bis zu einer Länge von 1024 Bytes damit ausgebbar sind. Bei der Suche nach anderen Ausgabemöglichkeiten bin ich dann auf folgendes VBS-Beispiel gestoßen:
Dim lang_str
Set WshNetwork = WScript.CreateObject("WScript.Network")
lang_str=.......
WScript.Echo lang_str


Als stand-alone VBS-Datei funktioniert das mit beliebig langen Strings einwandfrei. Dies aber in mein FF-Test-Skript eingebaut erzeugt die für mich nicht nachvollziehbare Fehlermeldung:
Objekt erforderlich: 'WScript'
Src: Laufzeitfehler in Microsoft VBScript


Auch die zusätzliche dim-Anweisung für eine Variable namens WScript hilft nicht weiter. Wo liegt das Problem? Ich habe mir dann nur mit dem Konstrukt FF_TextToClipboard helfen können, womit ich mir dann den String aus der Zwischenablage mit einem beliebigen Texteditor habe anzeigen lassen. Es geht aber bestimmt einfacher!

In diesem Zusammenhang interessiert mich auch eine Buchempfehlung, mit der der weitere Einstieg in die Internas der Script-Programmierung erleichtert wird. Oder kommt man mit: Windows Scripting . Automatisierte Systemadminstration mit VBScript, VB 6.0 und VB.NET unter COM und dem .NET Framework
weiter, was im Augenblick günstig gebraucht als Auflage 3 bei Amazon angeboten wird?

Über eine Unterstützung bei der einen und/oder der anderen Frage würde ich mich sehr freuen.

Gruß
Heinrich
 

Walter-46

Mitglied
Dabei seit
08.10.06
Beiträge
1.744
Standort
Meppen
Trophäen
*****!!! {**!!!}
#2
AW: Basisprobleme zum Skripting

Hallo Heinrich,

Ausgabe von Meldungen über den IE in einem gesonderten Fenster schon mal probiert? Ob das in Deinem Fall hilfreich ist, kann ich so noch nicht abschätzen.

VG
Walter
 

wookie

Mitglied
Dabei seit
24.04.06
Beiträge
226
Standort
Berlin
#3
AW: Basisprobleme zum Skripting

Hast Du es schon mal ohne das "WScript." versucht?
Einfach nur CreateObject?

Bei mir funktioniert zumindest:
Set objShell = CreateObject("WScript.Shell")

Bei der Nutzung von WScript.CreateObject erhalte ich den gleichen Fehler wie Du.
System WIN XP SP2, IE 6.0

Grüße
Dirk
 

opi-hs

Mitglied
Dabei seit
09.02.05
Beiträge
558
Standort
Köln
#4
AW: Basisprobleme zum Skripting

Hallo wookie,
vielen Dank für Deine Mühe, mir zu helfen.

Aber:
Hast Du es schon mal ohne das "WScript." versucht?
Einfach nur CreateObject?
Set ObjShell = CreateObject("WScript.Shell")
Ja, dann wird zwar dieses Statement akzeptiert, doch er beanstandet dann die Anweisung:
WScript.Echo lang_str

mit:
Objekt erforderlich: 'wscript'
Src: Laufzeitfehler in Microsoft VBScript


Ersetzt man versuchsweise WScript.Echo durch ObjShell.Echo
dann meckert er:
Das Objekt unterstützt diese Eigenschaft oder Methode nicht.: 'ObjShell.echo'
Src: Laufzeitfehler in Microsoft VBScript


Offensichtlich bekomme ich hier einiges im Zusammenhang mit Objekten nicht auf die Reihe. Wo sind die Spezis, die mir weiter die Augen öffnen?

Gruß
Heinrich

P.S. Interessant ist in diesem Zusammenhang ja auch, dass das ursprüngliche VBS-Script im Stand-allone-Modus anstandslos ausgeführt wird.
 
Zuletzt bearbeitet:

W.P.

Mitglied
Dabei seit
16.10.02
Beiträge
5.099
Standort
Anzing BY
#5
AW: Basisprobleme zum Skripting

Hallo Heinrich,

Das WScript Objekt ist so nicht in FF_ActiveScript enthalten. Somit kannst Du nicht darauf zugreifen.
In FF kannst Du einen Dialog mit einer Textbox und einem Button anzeigen lassen. Dialog ganz einfach mit dem Dialogeditor erzeugen, mit FF_SetControl den Text der Textbox zuweisen und mit FF_ShowDialog anzeigen.
Hat sich ja jemand große Mühe gemacht, dies in einem aktuellen Learning By Doing Leitfaden in einem Thread darzustellen.

Zum Nikon-MakerNotes-Format: Es gibt, wie ich Dir schon sagte, im Großen zwei Formate, die sich schon an Ihrem ID-StartCode unterscheiden lassen:
Den alte Version (ID = "NIKON" + '0' + '1') ist wie bei Canon nur ein IFD (Tiff Image File Directory), der die Offset-Datenadresse auf den Start-Punkt von Exif (Tiff-Dateistruktur) bezieht. Manchmal gibt es aber auch keinen ID-Code.
Die neue Version (ID = "NIKON" + '0' + '2'= der MakerNotes ist eine eigenständige Tiff-Struktur. Deren Aufbau findest Du frei zugänglich beim Suchen im Internet.
Die Bedeutung der Tiff-Tags und deren Interpretation kannst Du Dich neben anderen Quellen evtl. an den von Phil Harvey orientieren. Die numerische Interpretation orientiert sich manchmal nach Intel, manchmal nach Motorola-Konventionen. Bei dem Typ 2 der MakerNotes ist es kein Problem, da der Typ in den ersten beiden Bytes der Tiff-Struktur angegeben wird. Bei der alten Struktur braucht man dazu den Exif-"Tiffkopf", außerdem die Position des Datenbeginns des Makernotes-Tags.

Jegliche freie Interpretation über die binäre Position der Information ist idR zum Scheitern verurteilt. Es hilft nur, den Brotkrumen zu folgen, die die Struktur vorgibt. Zu schnell ändert sich die Position eines Datensatzes aufgrund eines Eingriffs eines Programms oder einer Funktion oder Firmware-Updates.

Warum gehst Du eigentlich nicht über den leichten Weg, den ich Dir andeutete?
 

opi-hs

Mitglied
Dabei seit
09.02.05
Beiträge
558
Standort
Köln
#6
AW: Basisprobleme zum Skripting

Hallo Werner,
ich habe mich über Deine ausführliche Antwort sehr gefreut. Bei dieser Gelegenheit auch nochmals meinen Dank für unsere Unterhaltung.

Das WScript Objekt ist so nicht in FF_ActiveScript enthalten. Somit kannst Du nicht darauf zugreifen.
So etwas ähnliches hatte ich mir schon gedacht. Doch wie komme ich an solche Infos?

Den Hinweis mit der Textbox werde ich gleich ausprobieren.

Zu den Makernotes werde ich mich dann noch etwas intensiver im Internet umsehen (u.a. Phil Harvey). Interessant in diesem Zusammenhang ist, dass Nikon den Objekttyp durch die Angabe der Brennweiten und der zugehörigen Öffnungsverhältnissee definiert, wobei diese in den Makernotes mit dem jeweils zehnfachen Wert als binäre Integer angegeben sind (z.B: 18-200mm/3.5-5.6 als: ...B4..07D0...23...38).

Warum gehst Du eigentlich nicht über den leichten Weg, den ich Dir andeutete?
Das ist zwar die schnelle Ad-hoc-Methode; doch wo bleibt dann der eigene Lernerfolg und die Vertiefung ums Wissen über die Makernotes und das Skripting?
Learning By Doing (and Asking the Experts)!

Schöne Grüße
Heinrich
 

opi-hs

Mitglied
Dabei seit
09.02.05
Beiträge
558
Standort
Köln
#7
AW: Basisprobleme zum Skripting

Hallo Werner,
sorry, wenn ich nicht locker lasse.

In meinem ersten Posting hatte ich das Problem angeschnitten, wie ein langer String (>1024 Zeichen) formatiert mit TABs und CR,LF in FF-Script ausgegeben werden kann, da MsgBox dies nur bis zu einer Stinglänge von 1024 ermöglicht.

Ich unterstelle mal, dass in Deiner Antwort der Hinweis:
...
In FF kannst Du einen Dialog mit einer Textbox und einem Button anzeigen lassen. Dialog ganz einfach mit dem Dialogeditor erzeugen, mit FF_SetControl den Text der Textbox zuweisen und mit FF_ShowDialog anzeigen.
...
als Lösungsvorschlag gedacht war.

Dies funktioniert so aber nicht und ist auch sicher nicht als Behelfslösung zur Ausgabe langer Strings gedacht. Denn die in der Textbox wiedergegebenen Strings lassen sich Weder mit CR,LF formatieren, noch verträgt FF längere Strings. Ab einer bestimmten Länge verabschiedet sich einfach FF (das Programm wird kommentarlos verlassen).

Was nun?

Viele Grüße
Heinrich
 

opi-hs

Mitglied
Dabei seit
09.02.05
Beiträge
558
Standort
Köln
#9
AW: Basisprobleme zum Skripting

Hallo Dirk,
ja, dies wäre eine ähnliche Lösung wie ich sie ja bereits in meinem ersten Posting erwähnt hatte:
Ich habe mir dann nur mit dem Konstrukt FF_TextToClipboard helfen können, womit ich mir dann den String aus der Zwischenablage mit einem beliebigen Texteditor habe anzeigen lassen.
Damit lassen sich auch sehr große Strings in die Zwischenablage kopieren. Von dort lassen sie sich über Einfügen in einen beliebigen Texteditor weiterkopieren und anzeigen; ähnlich dem Einlesen einer Log- bzw. Textdatei. Vorteil dabei wäre natürlich, dass sich so beliebig viele Strings seriell abspeichern und anzeigen ließen.

Danke für Deinen Rat.

Gruß
Heinrich
 

W.P.

Mitglied
Dabei seit
16.10.02
Beiträge
5.099
Standort
Anzing BY
#10
AW: Basisprobleme zum Skripting

Hm,

EDIT läßt sehr wohl CRLF zu. Sonst ginge ja die Anzeige von WPInfo nicht. Wo die Grenze ist, habe ich nie nachgefragt. Wahrscheinlich bei 64 oder 128 KB
Da ich die Exif/IPTC/XMP-Klassen für WPInfo als HTA-Application entwickelt habe und nur die Klassen für FF übertragen/kopiert habe, stellte sich mir das Problem so nicht.

Mehr als 64 KB kannst Du doch für Deine MakerNotes gar nicht brauchen. Der ganze Exif-Bereich ist maximal so groß. Da ist viel drin, was Du gar nicht anzeigen kannst (z. B. Vorschaubild; höchstens extrahieren, speichern und über FF wieder laden)
 

opi-hs

Mitglied
Dabei seit
09.02.05
Beiträge
558
Standort
Köln
#11
AW: Basisprobleme zum Skripting

Hallo Werner,
Du hast natürlich vollkommen recht. Auch Formatieranweisungen sind im Text-String problemlos möglich.

Ich war zunächst ein wenig begriffsstutzig und habe Deinen Rat nicht richtig auf die Reihe gekriegt.

Siehe hierzu auch mein Posting http://www.ffsf.de/showpost.php?p=135845&postcount=30

Sorry und nochmals Dank für Deine Unterstützung!
Gruß
Heinrich
 
Oben