Windows oder besser NTFS läßt ja edliches an Dateikommentaren zu. So kann man an eine simple test.txt ja einiges "anhängen".
Gibt es eine Möglich keit diese Felder via Autoit anzusprechen?
Danke
Gruß
Peter
Windows oder besser NTFS läßt ja edliches an Dateikommentaren zu. So kann man an eine simple test.txt ja einiges "anhängen".
Gibt es eine Möglich keit diese Felder via Autoit anzusprechen?
Danke
Gruß
Peter
Welches OS verwendest du? In Windows 7 habe ich diese Möglichkeit leider nicht. Stammt das Tab vielleicht von einer anderen Software?
Möglicherweise bin ich gedanklich schon im Wochenende :
Falls ich mich recht erinnere, werden die Eigenschaften nicht für alle Dateitypen in der Datei selbst gespeichert.
Bei .txt-Dateien werden sie z.B. in die Master File Table (MFT) geschrieben. Daher lassen sie sich auch nicht mit Tools, wie z.B. ResourceHacker editieren.
Gruß Musashi
Hmm das wundert mich nun doch... Betriebssystem = xp aber,
ich habe zwar kein 7 zur Hand, das geht aber unter Server 2003 und auch unter Server 2008. Rechtsklick in den schmalen Fensterrahmen und dann aus Untermenü auswählen?22.png
da gibt es dann noch weiter, Kameramodell und was weiß ich denn? Klar ist, dass Test.txt (Datei) reckte Maustatste und dann Dateiinfo wie in #1 in xp /Server 2003 anders gehandhabt wird wie unter Server 2008. Dort gibt es Dateiinfo wie aus #1 tatsächlich nicht. Jedoch die Geschichte mit der Titelleiste funktioniert in xp/Server2003/server2008 vollkomen gleich.
Könnt Ihr mal prüfen ob es das bei Euch auch gibt - damit wir mal auf einen stand "aufsetzen" können?
Danke
Gruß
Peter
Könnt Ihr mal prüfen ob es das bei Euch auch gibt - damit wir mal auf einen stand "aufsetzen" können?
Ja das geht ! (Mein System : Win 7 Pro - 64)
Rechtsklick in ein beliebiges Feld der Überschriften, also z.B. Name -> Weitere...
Gruß Musashi
Könnt Ihr mal prüfen ob es das bei Euch auch gibt - damit wir mal auf einen stand "aufsetzen" können?
Tatsächlich, als Detailansicht und dem Rechtsklick in den Listviewheader kann ich mir das auch anzeigen lassen.
Bei solchen Themen solltest du am besten mit dem Präfix C# oder C++ suchen, da für solche Sprachen meist Beispiele existieren.
Ich habe für C# etwas vielversprechendes gefunden was du dir mal angucken solltest: http://scatteredcode.net/tutorials/c-ad…tom-properties/
Das kannst du dann zu AutoIt umwandeln.
Ich habe für C# etwas vielversprechendes gefunden was du dir mal angucken solltest: http://scatteredcode.net/tutor…t-ntfs-custom-properties/
Ich habe auch einige Beispiele gefunden, aber irgendwie scheint es immer darauf hinauszulaufen, dass man die DSOfile.dll benötigt !
https://technet.microsoft.com/library/ee692828.aspx
Gruß Musashi
alpines - das sieht super aus. Leider habe ich noch nichtmal den Anflug einer Ahnung wie man das in autoit transferiert. Das übersteigt meine Möglichkeiten. Gibt es da einen chrash Kurs für Anfänger oder ev. freundliche Hilfe? Denn wie gezeigt wird, da kann man richtig schicke Sachen mit machen!
Danke
Peter.
Ps.: Musashi --> Grazie für Überprüfung
Das übersteigt meine Möglichkeiten. Gibt es da einen chrash Kurs für Anfänger oder ev. freundliche Hilfe?
Ich hätte mir eine C# DLL geschrieben und Funktionen exportiert um das ganze nochmal in C# zu wrappen (da gibt es sicherlich viel bessere Möglichkeiten).
Also praktisch eine bool writeAuthor(string filename, string author); und dann könntest du diese DLL in AutoIt ansprechen und einfach die Parameter übergeben.
Zum Thema C# DLLs in AutoIt habe ich bereits ein Tutorial verfasst.
Hallo Peter S. Taler !
Schau mal da rein :
https://www.administrator.de/forum/objectha…ren-228668.html
Setzt DSOfile.dll voraus !
$objFile = ObjCreate("DSOFile.OleDocumentProperties")
$objFile.Open("C:\test.txt")
$objFile.SummaryProperties.Title="1.2"
$objFile.Save
$objFile.close()
Property-Namen - SummaryProperties (XP) :
Name = 0
Size = 1
Type = 2
DateModified = 3
DateCreated = 4
DateAccessed = 5
Attributes = 6
Status = 7
Owner = 8
Author = 9
Title = 10
Subject = 11
Category = 12
Pages = 13
Comments = 14
Copyright = 15
Artist = 16
AlbumTitle = 17
Year = 18
TrackNumber = 19
Genre = 20
Duration = 21
BitRate = 22
Protected = 23
CameraModel = 24
DatePictureTaken = 25
Dimensions = 26
Width = 27
Height = 28
Company = 30
Description = 31
FileVersion = 32
ProductName = 33
ProductVersion = 34
Die Nummern unterscheiden sich aber von z.B. XP zu Win7, daher über den Namen gehen.
Alles anzeigen
Siehe z.B. auch :
https://www.autoitscript.com/forum/topic/71913-file-title/
Wenn man nach 'autoit DSOFile.OleDocumentProperties' googlet, findet man einige Beiträge, häufig aus dem engl. Forum. Teilweise sind die Quellen aber schon recht alt. Keine Ahnung, was da z.B. unter Win10 passiert .
Edit : Nach dem was ich kurz überflogen habe, solltest Du dein Skript bei obigen Beispielen immer als 32-Bit 'kompilieren' , also #AutoIt3Wrapper_UseX64 = N
Gruß Musashi
@ Musashi,
danke - mit dem Suchbegriff hatte ich - nach alpines Beitrag auch gesucht und gefunden. Trotz dass ich die DSOfile.dll ins Windows\system32 kopiert habe und registriert, bekomme ich bei Deinen Beispielzeilen folgenden Fehler:
"F:\Neu AutoIt v3 Script.au3" (14) : ==> The requested action with this object has failed.: $objFile.Open("F:\test.txt")
$objFile^ ERROR
Funktioniert das bei Dir?
Danke
Peter
"F:\Neu AutoIt v3 Script.au3" (14) : ==> The requested action with this object has failed.:$objFile.Open("F:\test.txt")
$objFile^ ERROR
Funktioniert das bei Dir?
Ich habe erst mal nur nach passenden Beispielen gesucht, um Dir eine mögliche Richtung aufzuzeigen (zum Testen fehlte mir die Zeit). Der Codeschnippsel diente nur zur Anschauung und ist nicht vollständig.
Relevant sind die Links !
Hast Du die DLL wirklich in das SYSTEM32 bzw. SYSWOW64-Verzeichnis (bei 64bit OS) kopiert und mit :
regsvr32 dsofile.dll
registriert ?
Schaue Dir bitte die Beiträge #5 und #6 aus folgendem Link an :
https://www.autoitscript.com/forum/topic/71913-file-title/
Prüfe nach ObjCreate was IsObj meldet :
$objFile = ObjCreate("DSOFile.OleDocumentProperties")
If Not IsObj($objFile) Then ... ; hier mal mittels ConsoleWrite prüfen
Ansonsten poste bitte mal dein Skript.
Gruß Musashi
ja klar ist registriert. Ich habe keinen code. Vielleicht ist das naiv aber ich war der Meinung der Schnippsel sollte laufen.
Ich lasse das laufen.....
$objFile = ObjCreate("DSOFile.OleDocumentProperties")
$objFile.Open("F:\test.txt")
$objFile.SummaryProperties.Title="1.2"
$objFile.Save
$objFile.close()
--------------------
und bekomme diese Fehlermeldung:
"F:\Neu AutoIt v3 Script.au3" (14) : ==> The requested action with this object has failed.:
$objFile.Open("F:\test.txt")
$objFile^ ERROR
-------------------------------------------------------------
Auch die diversen #UDFs aus den engl. Foren bringen ähnl. Fehler. Mir ist klar - sieht aus als sei die dll nicht registriert. Aber die habe ich - incl. - Neustart schon mehrmals reg und dereg usw.
Kaum habe ich das geschrieben - habe ich eine idee - mit Office Files funktioniert das z.B. *.xls. Sollte aber doch auch für alle anderen Files funktionieren - sonst ist das ja sinnlos.
Danke
Peter
Hallo Peter S. Taler !
Damit wir auf der gleichen Basis testen, hier das Skript des Users rover aus dem Thread :
https://www.autoitscript.com/forum/topic/71913-file-title/
(Nebenbei : Der User PsaltyDS , ein echtes Schwergewicht im engl. Forum, hat es für gut befunden)
Ich habe nur die AutoItWrappers gesetzt und einige Linkkommentare und MsgBoxen hinzugefügt.
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseX64 = N
#AutoIt3Wrapper_UseUpx = N
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
; https://support.microsoft.com/sw-ke/help/224351/the-dsofile-dll-files-lets-you-edit-office-document-properties-when-yo
; Use the DsoFile component from your custom application :
; The Dsofile.dll sample file reads and writes to both the standard properties and the custom properties from
; any "OLE Structured Storage" file. This includes, but is not limited to, the following:
; Word documents, Excel workbooks, PowerPoint presentations
; http://www.codeproject.com/KB/files/SummInfoPropSetFile.aspx
;http://scatteredcode.net/tutorials/c-add-and-edit-ntfs-custom-properties/
;However, Microsoft released a library called DSOfile, which is intended for changing properties of Office files if you
;don't have Office installed. It can, however, work on any type of files.
; constants for new properties type
Global Const $msoPropertyTypeNumber = 1
Global Const $msoPropertyTypeBoolean = 2
Global Const $msoPropertyTypeDate = 3
Global Const $msoPropertyTypeString = 4
Global $g_eventerror = 0 ; to be checked to know if com error occurs. Must be reset after handling.
$file = FileOpenDialog("Select a file to read/change file properties",@ScriptDir,"All (*.*)")
If @error Then Exit
If Not FileExists($file) Then Exit
Global $oMyError = ObjEvent("AutoIt.Error", "ComErrorHandler"); Install a custom error handler
$objFile = ObjCreate("DSOFile.OleDocumentProperties")
If $g_eventerror Then Exit
$g_eventerror = 0
If Not IsObj($objFile) Then
ConsoleWrite("@@ isObj = nicht OK" & @CRLF)
Exit
Else
ConsoleWrite("@@ isObj = OK" & @CRLF)
EndIf
$objFile.Open($file) ; bind to the summary information metadata attached to the file.
If $g_eventerror Then
ConsoleWrite("@@ .open fehhgeschlagen" & @CRLF)
Exit
EndIf
$g_eventerror = 0
;~ ; Remove properties
;~ $objProperty = $objFile.CustomProperties.Item("CustomItem")
;~ $objProperty.Remove
;~ $objFile.Save
; Create new property
; Add new property
;$objFile.CustomProperties.Add "CustomItem", $msoPropertyTypeString
;$objFile.Save
; Set new property value
;$objProperty = $objFile.CustomProperties.Item("CustomItem")
;$objProperty.Value = "CustomText"
;$objFile.Save
; Modify existing properties - Note: some wont allow writing to even if they exist in file
; more properties available - use DLL Export Viewer or OLE/COM Object Viewer 'oleview.exe' on dsofile.dll
; LINK gibt es nicht mehr " ->see also http://www.microsoft.com/technet/scriptcenter/resources/tales/sg0305.mspx for a list
;$objFile.SummaryProperties.Title = "Title" ; replace Title text here
;$objFile.SummaryProperties.Subject = "Subject"
;$objFile.SummaryProperties.Category = "Category"
;$objFile.SummaryProperties.Keywords = "Keywords"
;$objFile.SummaryProperties.Comments = "Comments"
;$objFile.SummaryProperties.Company = "Company"
;$objFile.SummaryProperties.Author = "Author"
;$objFile.SummaryProperties.RevisionNumber = "?"
MsgBox(0, "", "vor $objFile.Save")
$objFile.Save ; save changes to file properties
If $g_eventerror Then Exit
$g_eventerror = 0
; Retrieve custom properties values (if any)
For $objProperty In $objFile.CustomProperties
ConsoleWrite("+> " & $objProperty.Name & " : " & $objProperty.Value & @crlf)
Next
; display a sampling of some properties of file
$Title = $objFile.SummaryProperties.Title
ConsoleWrite('-> $Title = ' & $Title & @crlf)
$Subject = $objFile.SummaryProperties.Subject
ConsoleWrite('-> $Subject = ' & $Subject & @crlf)
$Category = $objFile.SummaryProperties.Category
ConsoleWrite('-> $Category = ' & $Category & @crlf)
$Keywords = $objFile.SummaryProperties.Keywords
ConsoleWrite('-> $Keywords = ' & $Keywords & @crlf)
$Comments = $objFile.SummaryProperties.Comments
ConsoleWrite('-> $Comments = ' & $Comments & @crlf)
$Company = $objFile.SummaryProperties.Company
ConsoleWrite('-> $Company = ' & $Company & @crlf)
$Author = $objFile.SummaryProperties.Author
ConsoleWrite('-> $Author = ' & $Author & @crlf)
$RevisionNumber = $objFile.SummaryProperties.RevisionNumber
ConsoleWrite('-> $RevisionNumber = ' & $RevisionNumber & @crlf)
MsgBox(0, "", "vor $objFile.Close")
$objFile.Close ; unbind from the summary information metadata attached to the file.
Exit
Func ComErrorHandler() ; optionally bypass message box, or use ConsoleWrite, Debugview or log errors to file
Local $sHexNumber = Hex($oMyError.number,8)
Local $sDesc = StringStripWS($oMyError.windescription, 2)
Msgbox(0,"AutoItCOM Test","We intercepted a COM Error !" & @CRLF & @CRLF & _
"err.description is: " & @TAB & $oMyError.description & @CRLF & _
"err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
"err.number is: " & @TAB & $sHexNumber & @CRLF & _
"err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF)
$g_eventerror = 1 ; something to check for when this function returns
$oMyError.clear
Endfunc
Alles anzeigen
Kaum habe ich das geschrieben - habe ich eine idee - mit Office Files funktioniert das z.B. *.xls.
Nun, dann scheint die DSOFile.dll ja schon mal korrekt registriert zu sein .
Sollte aber doch auch für alle anderen Files funktionieren - sonst ist das ja sinnlos.
Mehrere Quellen, u.A. auch der Link von alpines machen diesbzgl. folgende Aussagen :
http://scatteredcode.net/tutorials/c-ad…tom-properties/
However, Microsoft released a library called DSOfile, which is intended for changing properties of Office files if you ;don't have Office installed. It can, however, work on any type of files.
The Dsofile.dll sample file reads and writes to both the standard properties and the custom properties from any "OLE Structured Storage" file. This includes, but is not limited to, the following : Word documents, Excel workbooks, PowerPoint presentations
Ich habe im obigen Skript mal eine .doc-Datei geladen ==> alles OK !
Ich kann auch z.B. eine AutoIt-Exe öffnen, nur werden dort keine Detaileigenschaften angezeigt. Das liegt wohl daran, dass sie im Dateiheader selbst stehen.
Kompiliert man z.B. ein AutoIt-Skript, welches folgende Angaben enthält :
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_Description = Testprogramm
#AutoIt3Wrapper_Res_Field=ProductName|Peters Testprogramm
#AutoIt3Wrapper_Res_Fileversion = 1.0.0.0
#AutoIt3Wrapper_Res_LegalCopyright = 2018 by Peter S. Taler
#AutoIt3Wrapper_Res_Field=CompanyName|Taler GmbH
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
und aktiviert im Explorer z.B. die Spalte 'Copyright', dann wird das Copyright auch angezeigt. Offensichtlich holt sich der Explorer die Info aus dem Dateiheader.
Bei z.B. Textdateien werden keine Headerdaten in der Datei abgelegt. Hier muss man sie mit dem obigen Skript in das NTFS-Filesystem eintragen (ggf. geht das auch für z.B. AutoIt-Exe's u.s.w.)
Insgesamt hatte ich keine Fehler, auch nicht bei .txt's !
Wenn Du mir die Frage gestattest : Warum möchtest Du das Ganze überhaupt machen ?
Sobald eine Datei z.B. auf einen USB-Stick kopiert wird, gehen die Informationen der Master File Table (MFT) 'verloren', außer bei den Dateitypen, die Eigenschaften im Dateiheader selbst ablegen.
Gruß Musashi
warum ich das mache? Du hast natürlich recht, wenn mann die Files kopiert auf nicht NTFS -- > alles Futsch. Aber das habe ich nicht vor. Liegt alles auf einem Server. Angefangen hat das mit einer Idee. Habe ein kleines Progrämmchen in Autoit verfasst mit dem man KFM. Belege erstellen kann. Diese werden autom. in PDFs verwandelt, autom. gemailt und gespeichert; incl. Bildern via drag n drop. Dabei kam ich auf die Idee einen möglichen Workflow über "PDF Anlagen" darzustellen, was auch gut funktioniert. Den Workflow darzustellen, auf den "ersten Blick" funktioniert super via Kommentar - nur muss man Ihn "reinbringen".
Bin gerade ein wenig eingespannt - danke für Deine Schützenhilfe- Ich hoffe ich komme übers Wochenende zum "Gleichziehen"..... Melde mich dann umgehend.
Grüße
Peter
Ps.: Genauer gerne per PN...
Hallo Peter S. Taler !
Da heute eh Scheißwetter war, habe ich etwas weiter getestet und gelesen - man ist ja hartnäckig .
Fazit :
Quasi alle Quellen die ich zu DSOFile gesehen habe, leiten sich mehr oder weniger von folgendem Microsoft Technet Artikel ab : https://technet.microsoft.com/en-us/library/ee692828.aspx
Ich weiß nicht wie gut dein englisch ist aber es lohnt sich, das mal durchzulesen. Auch das von mir gepostete Skript des Users rover (siehe Beitrag #14) ist eine Umsetzung dieses Artikels.
Mit DSOFile lassen sich übrigens nicht alle Metadaten editieren, die z.B. vom Explorer angeboten werden. Welche genau das sind, kannst Du dem Artikel entnehmen.
Einige Eigenschaften wie z.B. SummaryProperties.ByteCount sind logischerweise read-only.
Erst mal die gute Nachricht :
Mithilfe dieses Skriptes kann man ausgewählte Metadaten auch für Nicht-Office Dateien speichern. Öffnet man die Datei mittels eines AutoIt-Skriptes erneut, so werden die Daten angezeigt.
Allerdings, und das ist der Haken, werden diese Metadaten im Windows Explorer nur für Office Dateien aufgeführt, obwohl sie nachweislich existieren (zumindest bei Win 7+ ; bei XP lief es ggf. anders).
Das ist wieder mal eine der heißgeliebten Besonderheiten von Microsoft . Daran wird sich vermutlich auch nichts ändern, wenn man die Metadaten mit einem C++/C# Programm usw. einträgt - ich lasse mich aber gerne überraschen.
Um mit diesen Daten zu arbeiten, musst Du Dir wohl mit AutoIt ein eigenes Anzeigeprogramm bauen.
==> Zu : alternate data streams (ADS)
Neben den Metadaten kann NTFS erweiterte Eigenschaften in Form von alternate data streams speichern.
siehe : https://en.wikipedia.org/wiki/NTFS#Alte…reams_.28ADS.29
Diese werden im Windows Explorer aber auch nicht angezeigt.
Für den alternativen Filemanager 'Total Commander' gibt es angeblich Plug-In's, welche das können sollen, aber das habe ich nicht getestet. Stichworte : NTFS Descriptions und QuickSearch eXtended
Möglicherweise zeigt der 'Total Commander' auch die Metadaten von Nicht-Office-Dateien an ?!
==> Nur als Idee : BeCyPDFMetaEdit
Zur Not hilft Dir vielleicht auch das Programm BeCyPDFMetaEdit weiter. Damit soll man wohl Metadaten von PDFs bearbeiten können (Freeware, stand-alone, angeblich über Kommandozeile steuerbar).
Ob diese dann auch im Explorer angezeigt werden, müsstest Du probieren.
Viel kann ich zu diesem Thema leider nicht mehr beitragen, hoffe aber, es hat Dir etwas gebracht .
EDIT : Anregung
Könntest Du Dich ggf. mit dem Gedanken anfreunden den Threadtitel :
"Kommentar wie geht das - ohje Ich she den Wald vor lauter Bäumen nicht"
zu ändern, in z.B. :
"Kommentare in NTFS-Metadaten von Files schreiben - wie geht das ?"
Das würde es anderen Usern vermutlich erleichtern, den Sinn des Threads zu erkennen.
Gruß Musashi
Guten Morgen,
der Reihe nach:
Thread Titel wunschgemäß geändert ... passt ja auch besser
Ich hatte die Artikel überflogen, und hatte auch den Code gefunden. Nur egal was ich machte, welchen Code oder Codeschnipsel ich auch immer eingesetzt habe - es flog mir um die Ohren.
Bis ich in #13 auf die Idee kam - es mitt einer xls zu probieren - da "lief es" TXT flog mir weiter um die Ohren! Deine Aussage - läuft - gab mir zu schlucken!
Aber - man ist ab und an einfältig. Was schreibe ich in #1 ...oder NTFS... was schreibst Du in #14 ...beim umkopieren ist alles futsch.... . Grrrrrrr.... ich sitze hier vor meinem Notebook, (NTFS) ABER ich arbeite mit eine RAM Disk (FAT32) und was mache ich??? Ich lasse Script und Testdatei auf F:\ (RAM Disk) laufen!!!!!!!!!!
Und schon haben wir (denke ich) den Hacken... Läuft Script und Testdatei (txt) auf NTFS alles ok. Datei unter FAT und TYP Office ---> ok
FAT und kein OFFICE ---> Erros siehe Bildchen...
Kannst Du das nachvollziehen?
Abfangen. Nachsehen ob Typ = Office oder Datentrräger ist Ntfs.
Gruß
Peter
Danke sollte nicht fehlen
wenn ich mit dem Script aus #14 den Comment einer Nicht Office Datei ändere ist das auch im Explorer zu sehen - sofern die Spalte eingeblendet ist (xpsp3)
Gruß
Peter
Abfangen? Nachsehen ob Typ = offiche und Datentrräger ist Ntfs?
Deshalb vorher mit https://www.autoitscript.com/autoit3/docs/f…tFileSystem.htm prüfen, ob es sich wirklich um NTFS handelt!