1

Тема: AHK: Изменить дату съемки картинок

Здравствуйте. Имеется папка с картинками разного формата, желательно учитывать, что путь к папке может меняться, но это не обязательно. Задача: изменить дату съемки всех картинок в свойствах на текущую. Я вижу два способа реализации:
1) Самый идеальный для меня: определение выделенных файлов-картинок и поочередная или массовая смена их дат в свойствах.
2) Парсинг всех папок в папке (ибо там точно всегда-всегда будут только картинки) и поочередная или массовая смена их дат в свойствах.
Для справки, вот скриншот свойств картинки. Курсор стоит на том месте, которое мне нужно изменить:
https://image.prntscr.com/image/4_PoqScuSLu8NvBkQnXXDw.png
Жду ваших советов.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

2

Re: AHK: Изменить дату съемки картинок

Через Gdi+ SetPropertyItem можно.

3

Re: AHK: Изменить дату съемки картинок

FileSetTime.

4

Re: AHK: Изменить дату съемки картинок

svoboden, а вы пробовали?

5

Re: AHK: Изменить дату съемки картинок

Malcev, нет еще, пусть пользователь сам проверит.

6

Re: AHK: Изменить дату съемки картинок

Зачем тогда впустую советовать?

7 (изменено: svoboden, 2017-10-03 18:50:11)

Re: AHK: Изменить дату съемки картинок

Раз не проверял, значит, впустую, да уж. А для чего это команда нужна.

8

Re: AHK: Изменить дату съемки картинок

FileSetTime
Изменяет отметку даты и времени одного или нескольких файлов или папок.
Какую именно отметку времени изменить.
М = время изменения (это значение по умолчанию, если параметр пустой или опущен)
С = время создания
А = время последнего доступа

Как видите параметра даты съёмки там нет.

9 (изменено: belyankin12, 2017-10-03 19:40:05)

Re: AHK: Изменить дату съемки картинок

Malcev, я так понял это одна из библиотек дополнительных, скачал я одну такую, gdip_all.ahk, там нет такой функции. Вообще ничего по property и item нет.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

10 (изменено: svoboden, 2017-10-03 20:25:21)

Re: AHK: Изменить дату съемки картинок

Можно открыть свойства файла:

#Persistent
 #SingleInstance force
 SetBatchLines -1
 
run, Properties "C:\WINDOWS\notepad.exe"
WinWait Свойства:
SendMessage, 0x130C, 3,, SysTabControl321, Свойства:

И кликами вести нужную дату, но это костыль.

11

Re: AHK: Изменить дату съемки картинок

Схожая тема: AHK: Переименование mp3-файлов по tag-маске.

12 (изменено: stealzy, 2017-10-03 21:38:09)

Re: AHK: Изменить дату съемки картинок

belyankin12, полезно знать название того, чего вы хотите менять. Общепринятое название для этого - exif.
Далее задействуем неведомую вам магию: вот и вот.
Как зачастую и оказывается — простейший путь это подключение существующих библиотек и консольных прог (запуск консольных вы можете осилить и сами).
По поводу GDI+ — SetPropertyItem это ф-ия самой библитеки Gdiplus.dll, а не кода обертки gdip_all.ahk. Вот пример использования.

belyankin12 пишет:

я так понял это одна из библиотек дополнительных, скачал я одну такую, gdip_all.ahk, там нет такой функции. Вообще ничего по property и item нет.

Конечно, зачем нам поиск, можно же задать вопрос на форум, пусть кто нибудь поищет за нас !

13

Re: AHK: Изменить дату съемки картинок

ypppu, смотрел в эту сторону, но все застопорилось на том, что я не знаю команды для смены параметра. Т.е. я могу вывести параметр даты съемки через objFolder.GetDetailsOf(objFilename, 12), но изменить его не знаю как.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

14

Re: AHK: Изменить дату съемки картинок

Malcev пишет:

Как видите параметра даты съёмки там нет.

Параметра нет, но его можно добавить.

15

Re: AHK: Изменить дату съемки картинок

Так добавьте, если можно, потом в коллекцию добавите.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

16

Re: AHK: Изменить дату съемки картинок

teadrinker, по-моему svoboden собирался добавить параметр в команду языка AutoHotkey, т.е. ему не в коллекцию, а скорее сюда :
https://github.com/Lexikos/AutoHotkey_L

17 (изменено: svoboden, 2017-10-03 22:45:13)

Re: AHK: Изменить дату съемки картинок

stealzy, teadrinker, а что, хотите сказать, что такое нельзя сделать?

18

Re: AHK: Изменить дату съемки картинок

Можно, нужно всего-то пересобрать AutoHotkey.exe. Я, кстати, один раз это делал. Так что пробуйте.
А я попробовал, как Malcev советовал, такое вышло:

imagePath := A_Desktop . "\test.jpg"
dateTime := "2022:01:01 12:00:00"
ChangeDateTimeImageProperty(imagePath, dateTime)
return

ChangeDateTimeImageProperty(imagePath, newDateTimeStr, jpgQuality := 100)  {
   static DateTimeOriginal := 0x9003, PropertyTagTypeASCII := 2
   
   VarSetCapacity(dateTime, size := StrPut(newDateTimeStr, "CP0"), 0)
   StrPut(newDateTimeStr, &dateTime, "CP0")
   
   VarSetCapacity(PropertyItem, 4*2 + A_PtrSize*2, 0)
   NumPut(DateTimeOriginal, PropertyItem)
   NumPut(size, PropertyItem, 4)
   NumPut(PropertyTagTypeASCII, PropertyItem, 8)
   NumPut(&dateTime, PropertyItem, 4*2 + A_PtrSize)
   
   pToken := Gdip_Startup()
   DllCall("gdiplus\GdipLoadImageFromFile", Str, imagePath, PtrP, pBitmap)
   DllCall("gdiplus\GdipSetPropertyItem", Ptr, pBitmap, Ptr, &PropertyItem)
   SplitPath, imagePath, fileName
   Gdip_SaveBitmapToFile(pBitmap, A_Temp . "\" . fileName, jpgQuality)
   Gdip_DisposeImage(pBitmap)
   Gdip_Shutdown(pToken)
   FileMove, % A_Temp . "\" . fileName, % imagePath, 1
}

Нужна библиотека Gdip.ahk.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

19 (изменено: belyankin12, 2017-10-03 23:11:44)

Re: AHK: Изменить дату съемки картинок

Использую все тот же gdip_all.ahk. По крайней мере все используемые функции есть в нём, код следующий:


#Include Gdip_All.ahk

path := "C:\Users\Белочка\Desktop\Notes\Screenshot_4.png"
time := "" A_YYYY ":" A_MM ":" A_DD " " A_Hour ":" A_Min ":" A_Sec ""
ChangeDateTimeImageProperty(path, time)
MsgBox, % time
return

Скрипт запускается, срабатывает, вижу дату, но параметр в свойствах не меняется.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

20

Re: AHK: Изменить дату съемки картинок

У меня срабатывает (пробовал на win 10), хотя с кавычками у вас явный перебор.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

21

Re: AHK: Изменить дату съемки картинок

Ну путь же в виде строки передается, а с временем вряд-ли проблемы возникнут, msgbox не зря ставил на проверку, время правильное. Windows 7, может быть проблема в самом dllcall, какая у вас версия AHK?

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

22 (изменено: teadrinker, 2017-10-03 23:24:50)

Re: AHK: Изменить дату съемки картинок

Только что на Windows 7 проверил, работает. Версия ahk 1.1.26.01 64-bit Unicode.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

23 (изменено: belyankin12, 2017-10-03 23:28:13)

Re: AHK: Изменить дату съемки картинок

Юникод, так и думал, минутку...

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

24

Re: AHK: Изменить дату съемки картинок

На 32-бит тоже проверил.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

25

Re: AHK: Изменить дату съемки картинок

До этого использовал ANSI, открыл через юникод, теперь хотя бы дата изменения файла обновилась на текущую, а дата съемки все ещё остается пустой.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.