Сбой метода iTunes SaveArtworkToFile, вызванного из COM-объекта AutoHotkey

Я пытаюсь извлечь файл обложки из файлов iTunes MP3, используя AutoHotkey (v1.1). Скрипт работает хорошо, пока не дойдет до метода SaveArtworkToFile.

objITunesApp := ComObjCreate("iTunes.Application")
objLibrary := objITunesApp.Sources.Item(1)
objPlaylist := objLibrary.Playlists.ItemByName("! iTunesCovers")
objTracks := objPlaylist.Tracks
Loop, % objTracks.Count
{
    objTrack := objTracks.Item(A_Index)
    Loop, % objTrack.Artwork.Count
    {
        objArtwork := objTrack.Artwork.Item(A_Index)
        TrayTip, % "Track Index: " . objTrack.index
            , % "Artwork: " . A_Index . "/" . objTrack.Artwork.Count . "`n"
            . "Format: " . objArtwork.Format  . "`n"
            . "IsDownloadedArtwork: " . objArtwork.IsDownloadedArtwork  . "`n"
            . "Description: " . objArtwork.Description
        strFilePath := objTrack.index . "-" .  A_Index
        if (objArtwork.Format = 1)
            strExtension := "bmp"
        else if (objArtwork.Format = 2)
            strExtension := "jpg"
        else if (objArtwork.Format = 4)
            strExtension := "gif"
        else if (objArtwork.Format = 5)
            strExtension := "png"
        else
            strExtension := ""
        strResult := objArtwork.SaveArtworkToFile(strFilePath . "." . strExtension)
        MsgBox, % strFilePath . "." . strExtension . "`nResult: " . strResult
    }
}

Я получаю это сообщение об ошибке:

---------------------------
SaveArtworkToFile.ahk
---------------------------
Error:  0x8000FFFF - Défaillance irrémédiable

Source:     (null)
Description:    (null)
HelpFile:       (null)
HelpContext:    0

Specifically: SaveArtworkToFile

    Line#
--->    017: strResult := objArtwork.SaveArtworkToFile(strFilePath)
---------------------------

У меня такой же результат с форматами файлов bpm и jpg. И strResult, возвращаемый SaveArtworkToFile, пуст. Должен ли этот метод поддерживаться COM-объектом AHK iTunes.Application?

Спасибо и с новым годом!

2 ответа

Решение

@Manuell: О! Спасибо за то, что вернули мне документ. в

Parameters: filePath Full path to the artwork image file.

Я пропустил слово "Полный". В моем сценарии я полагался на относительный путь. Я только что проверил это с абсолютным путем и эта работа!

Погуглил это для вас: IITArtwork:: SaveArtworkToFile

HRESULT IITArtwork:: SaveArtworkToFile ([in] BSTR filePath)
Сохранить данные художественного произведения в файл изображения.

Формат сохраненных данных определяется форматом графического объекта (JPEG, PNG или BMP). Каталог, содержащий файл, должен уже существовать, он не будет создан. Если файл уже существует, его содержимое будет заменено.

Параметры: filePath Полный путь к файлу графического изображения.

Этот метод не возвращает значение (как сказал Ганс в комментарии). Пытаться:

objArtwork.SaveArtworkToFile(strFilePath . "." . strExtension)
Другие вопросы по тегам