Registriert seit: 13.08.2017
Version(en): 2016
Hallo Forum,
mit dem folgenden Code lässt sich die Bewertung eines Fotos auslesen.
Sub getRanking()
Dim OFS As Object, oFile As Object
Dim objShell As Object, objFolder As Object
Dim strPath, strFile As String
strFile = "C:\Test\Foto.JPG"
'FileSystemObjekte
Set OFS = CreateObject("Scripting.FileSystemObject")
Set oFile = OFS.GetFile(strFile)
strPath = oFile.ParentFolder
'ShellObjekte
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(strPath)
'Bewertung
Debug.Print objFolder.GetDetailsOf(objFolder.Items.Item(oFile.Name), 19)
End Sub
Wie kann man diese Dateieigenschaft via VBA-Code ändern?
mfG
Rolf Beißner
Registriert seit: 06.12.2015
Version(en): 2016
Hallo,
die Bewertung kann zwar per Hand im Explorer geändert werden, aber m.W.n. nicht mit VBA. Auch in meinen Unterlagen zu WIA habe ich nicht gefunden.
Es gibt auch API-Zugriffe auf die Properties, aber auch da fand ich keine Beispiele für diesen Zweck.
Gefunden habe ich ein VB-Project "ExIf-Writer", das verspricht solche Änderungen vornehmen zu können (ähnlich wie C++ uä)
Vermutlich ist es das Einfachste ein Foto-Software wie "Exiftools" zu nutzen (oder Lightroom).
Ich hoffe, es kommen noch andere Beiträge.
mfg
Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:1 Nutzer sagt Danke an Fennek für diesen Beitrag 28
• Rolf Beißner
Registriert seit: 13.08.2017
Version(en): 2016
12.10.2019, 14:16
(Dieser Beitrag wurde zuletzt bearbeitet: 12.10.2019, 15:48 von WillWissen.
Bearbeitungsgrund: Codetags
)
Hallo Forum,
die angestrebte Lösung - "Foto bewerten via VBA" - habe ich nicht gefunden.
Stattdessen einen "work-around", der für meine Zwecke - "bestimmte Fotos kennzeichnen zwecks Filtermöglichkeit" - ausreicht.
Für etwaige Interessenten hier der entsprechende Code.
fG
Rolf Beißner
Code:
Option Explicit
' Bildkopie mit Kommentar in sep. Verzeichnis anlegen
' Verweis setzen auf: "Microsoft Windows Image Acquisition Library v2.0"
Sub setProp()
'Deklarationen
Dim objImage As ImageFile
Dim objIP As ImageProcess
Dim objVector As Vector
Dim strID As Variant
Dim strFile As String
Dim iRow As Integer, iCount As Integer
'Property-IDs
strID = Array("40091", "40092", "40093", "40094", "40095") 'Titel,Kommentar,Autor,Stichwort,Betreff
'WIA-Objekte
Set objImage = CreateObject("WIA.ImageFile")
Set objIP = CreateObject("WIA.ImageProcess")
Set objVector = CreateObject("WIA.Vector")
'Anzahl der Einträge im aktiven Sheet (ab Zeile 2)
iCount = 5
'Einträge abarbeiten
For iRow = 1 To iCount
'vollständiger Dateiname - z.B. "C:\Test\Foto.jpg"
strFile = Cells(iRow + 1, 1)
'Bild laden
objImage.LoadFile strFile
'Filter Parameter
objIP.Filters.Add objIP.FilterInfos("Exif").FilterID
objIP.Filters(1).Properties("ID") = strID(1) 'hier Kommentar
objIP.Filters(1).Properties("Type") = VectorOfBytesImagePropertyType
'Kommentartext
objVector.SetFromString "Auswahl"
objIP.Filters(1).Properties("Value") = objVector
'Kommentar einstellen
Set objImage = objIP.Apply(objImage)
'Bild unter gleichem Namen in sep Verzeichnis speichern (hier "..Test\Auswahl\..")
objImage.SaveFile Replace(strFile, "Test\", "Test\Auswahl\")
Next
End Sub
Registriert seit: 06.12.2015
Version(en): 2016
Hallo,
danke für den Hinweis.
Das "CreationDate" ist nicht so einfach zuändern, aber so geht es:
Code:
$Tag = get-date
Set-ItemProperty -Path C:\Users\User\Desktop\Kreis.jpg -Name 'CreationTime' -Value $Tag.AddDays(-12)
Get-ItemProperty -Path C:\Users\User\Desktop\Kreis.jpg -Name 'CreationTime'
(Powershell)
mfg
Registriert seit: 13.08.2017
Version(en): 2016
Hallo Fennek,
danke für den Tipp. Sehr hübsch

Gibt es auch die Möglichkeit, das im Windowsexplorer angezeigte Aufnahmedatum zu modifzieren?
fG
Rolf
Registriert seit: 06.12.2015
Version(en): 2016
na ja, wenn Du fragst:
https://chrisjwarwick.wordpress.com/2011...-cmdlet-2/Im Netz gibt es auch Ansätze für C++.
00202
Nicht registrierter Gast
Hallo Rolf, :19:
so setzt du die
drei Zeiten "
Erstellt", "
Geändert" und "
Letzter Zugriff" mit
PowerShell:
Code:
$DateTime = get-date 10.10.2019-14:00
[System.IO.File]::SetLastWriteTime("C:\Temp\rh.jpg", $DateTime)
[System.IO.File]::SetLastAccessTime("C:\Temp\rh.jpg", $DateTime)
[System.IO.File]::SetCreationTime("C:\Temp\rh.jpg", $DateTime)
Noch gibt es die Unterschiede UTC+2 / UTC+1 - je nach Sommer- bzw. Winterzeit.
Alle JPG-Dateien eines Ordners - "
Geändert" = "
Erstellt" in
PowerShell:
Code:
gci C:\Temp\*.jpg | ? {!$_.PSisContainer} | % {$_.LastWriteTime=$_.CreationTime}
Für Das Aufnahmedatum nutze ich "
jhead". In der
Dokumentation ist für dich der
Parameter "
-dsft" interessant.
Um das
Aufnahmedatum eines Bildes zu
ändern:
Code:
C:\Temp\jhead.exe -dsft C:\Temp\rh.jpg
Da es ein "
Kommandozeilentool" ist, lässt es sich auch per
VBA steuern. :21:
Folgende(r) 1 Nutzer sagt Danke an Gast für diesen Beitrag:1 Nutzer sagt Danke an Gast für diesen Beitrag 28
• Rolf Beißner
Registriert seit: 06.12.2015
Version(en): 2016
13.10.2019, 14:52
(Dieser Beitrag wurde zuletzt bearbeitet: 13.10.2019, 15:15 von WillWissen.
Bearbeitungsgrund: Link sichtbar gemacht
)
Diese Quelle ist besser:
https: //social.technet.microsoft.com/Forums/scriptcenter/en-US/8b398413-0728-4a8a-a593-d2e8b92b88f2/editing-image-exif-tags?forum=ITCG
Damit reduziert sich das PS-Script (an einem Beispiel getestet):
Code:
$f = 'C:\Users\Office\Desktop\Date_Test2.jpg'
$img = [System.Drawing.Image]::FromFile($f)
$item = $img.psbase.GetPropertyItem(36867)
$New_time = get-date 01.12.2015 #$Old_time.Add('100')
$NT_Str = $New_time.ToString("yyyy:MM:dd HH:mm:ss`0")
$item.Value = [byte[]][System.Text.Encoding]::ASCII.GetBytes($NT_Str)
$img.SetPropertyItem($item)
$img.Save('C:\users\Office\Desktop\neu.jpg')
Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:1 Nutzer sagt Danke an Fennek für diesen Beitrag 28
•
Registriert seit: 13.08.2017
Version(en): 2016
Guten Morgen Fennek,
vielen Dank für deine Mühe
Klappt vorzüglich. Erstaunlich, was alles geht.
Herzliche Grüße
Rolf