Имя: Пароль:
1C
1С v8
Установить свойство COMОбъекта "Shell.Application"
0 Gross2023
 
10.07.23
15:01
Получить свойства, как я понимаю, можно методом GetDetailsOf. А как установить(изменить) его?
1 Gross2023
 
10.07.23
15:13
Наверное, нужно использовать не Shell.Application, а другой объект. Только вот какой?
2 lodger
 
10.07.23
15:16
ну. э.
GetDetailsOf в shell это свойства файлов и папок. косвенные.
вот открой в Explorer папку, найди jpeg и предложи нам метод поменять ему размер?
3 Gross2023
 
10.07.23
15:21
(2) Меня интересует свойство "Название"(не наименование, а название), которое во вкладке "Подробно". Его прямо там менять можно
4 Gross2023
 
10.07.23
15:28
Нашел нужное свойство, но вопрос теперь с кодировкой:
Image = Новый COMОбъект("WIA.ImageFile");
Image.LoadFile(ПутьКФайлу);
Если Image.Properties.Exists("ImageDescription") Тогда
    Image.Properties("ImageDescription").Value = "авркенк";
КонецЕсли;
Проблема с кодировкой??
5 Gross2023
 
10.07.23
15:42
(4) Свойство ImageDescription появляется в коллекции только когда меняю вручную свойство "Название" в винде :(
6 lodger
 
10.07.23
15:56
а в лоб не пробовал без exist присвоить новое значение?
Image.Properties("FormatID").Value = "твоя строка"
7 Gross2023
 
10.07.23
16:01
(6) Exists, как я понял, это аналог 1С-овского "Свойство" для структуры (короче говоря проверка наличия свойства). Сейчас пробую, но, может, у кого-то уже есть опыт?
8 Gross2023
 
10.07.23
16:08
(6) Отказано в доступе
9 lodger
 
10.07.23
16:37
тогда надо использовать 2 объекта ИмейджФайл для наведения на конкретный экземпляр картинки в каталоге и ИмейджПроцесс для модификации
'---------------------------------------------------------------------------------------
' Procedure : WIA_SetExifPropety
' Author    : Daniel Pineault, CARDA Consultants Inc.
' Website   : http://www.cardaconsultants.com
' Purpose   : Set an image's Exif metadata property value
'               Currently only for Ascii properties
' Copyright : The following is release as Attribution-ShareAlike 4.0 International
'             (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/
' Req'd Refs: Late Binding version  -> None required
'             Early Binding version -> Microsoft Windows Image Acquisition Library vX.X
'
' Input Variables:
' ~~~~~~~~~~~~~~~~
' sInitialImage     : Fully qualified path and filename of the image file to set the Exif
'                       metadata property value
' lPropertyId       : ID no of the Exif metadata property to set the value of
' vValue            : Value to set
' sDestiationImage  : Fully qualified path and filename if you wish to create a new image
'                       instead of overwriting the existing one
'
' Usage:
' ~~~~~~
' Call WIA_SetExifPropety("C:\Temp\IMG01.jpg", 271, "CARDA Industries Inc.")
' Call WIA_SetExifPropety("C:\Temp\IMG01.jpg", 272, "cPhone V6.0", "C:\Temp\IMG01-modified.jpg")
'
' Revision History:
' Rev       Date(yyyy-mm-dd)        Description
' **************************************************************************************
' 1         2022-02-10              Initial Public Release
'---------------------------------------------------------------------------------------
Sub WIA_SetExifPropety(sInitialImage As String, lPropertyId As Long, vValue As Variant, Optional sDestiationImage As String)
    On Error GoTo Error_Handler
    #Const WIA_EarlyBind = False    'True => Early Binding / False => Late Binding
    #If WIA_EarlyBind = True Then
        'Early Binding req: Microsoft Windows Image Acquisition Library vX.X
        Dim oIF               As WIA.ImageFile
        Dim oIP               As WIA.ImageProcess
        
        Set oIF = New WIA.ImageFile
        Set oIP = New WIA.ImageProcess
    #Else
        Dim oIF               As Object
        Dim oIP               As Object
        Const StringImagePropertyType = 1002

        Set oIF = CreateObject("WIA.ImageFile")
        Set oIP = CreateObject("WIA.ImageProcess")
    #End If

    With oIP
        .Filters.Add (.FilterInfos("Exif").FilterID)
        .Filters(1).Properties("ID") = lPropertyId
        .Filters(1).Properties("Type") = StringImagePropertyType
        .Filters(1).Properties("Value") = vValue
    End With

    oIF.LoadFile sInitialImage
    Set oIF = oIP.Apply(oIF)
    If sDestiationImage <> "" Then    'New file specified
        If Len(Dir(sDestiationImage)) > 0 Then Kill sDestiationImage
        oIF.SaveFile sDestiationImage
    Else    'Overwrite original if no Dest. file specified
        Kill sInitialImage
        oIF.SaveFile sInitialImage
    End If

Error_Handler_Exit:
    On Error Resume Next
    If Not oIP Is Nothing Then Set oIP = Nothing
    If Not oIF Is Nothing Then Set oIF = Nothing
    Exit Sub

Error_Handler:
    MsgBox "The following error has occured" & vbCrLf & vbCrLf & _
           "Error Number: " & Err.Number & vbCrLf & _
           "Error Source: WIA_SetImageOrientation" & vbCrLf & _
           "Error Description: " & Err.Description & _
           Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
           , vbOKOnly + vbCritical, "An Error has Occured!"
    Resume Error_Handler_Exit
End Sub
Examples Of Its Usage
If you simply want to change a property and retain the same file name then you can do:

Call WIA_SetExifPropety("C:\Temp\IMG01.jpg", 271, "CARDA Industries Inc.")
If, on the other hand you wish to change a property value but save the modification as a different file, then you’d do:

Call WIA_SetExifPropety("C:\Temp\IMG01.jpg", 272, "cPhone V6.0", "C:\Temp\IMG01-modified.jpg")
10 Gross2023
 
10.07.23
16:48
(9) Попробую сейчас
11 Gross2023
 
10.07.23
16:55
(9) Тяжело читать. На языке 1с бы)
12 Gross2023
 
10.07.23
16:59
Кстати, в ImageProcess нет подходящих мне свойств. Жаль...
13 Gross2023
 
10.07.23
17:02
Может как-то через двоичные данные можно как-то поменять свойства картинки?
14 lodger
 
10.07.23
18:13
(13) если ты осилишь ковыряние в ДД
https://its.1c.ru/db/metod8dev#content:5917:hdoc:jpeg
то это превзойдет затраты на переваривание кода из (9)
15 Gross2023
 
11.07.23
08:49
(14) Там опять описывается чтение при помощи ЧтениеДанных. Мне же нужно изменить свойства файла... может ЗаписьДанных?
16 lodger
 
11.07.23
10:15
(15) Запись, да.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.