Как активировать полноэкранные приложения в фоновом режиме с помощью Apple Script

Я работал над приложением в Automator, которое меняет фон рабочего стола на обложку альбома текущей песни, воспроизводимой в iTunes.

Вы можете скачать мою первую версию здесь .

Самая раздражающая проблема, которую я нашел, заключается в том, что, когда есть полноэкранное приложение, открытое на одном и том же дисплее, обновляемом, всякий раз, когда песня изменяет фоновые мерцания между текущей песней и предыдущей.

Это мой текущий код (обновлен с версии 1.0 выше):
Возможно, Вам потребуется прокрутить код, чтобы увидеть все.

tell application "System Events"
    set fileName to (((path to desktop) as text) & ".iTunesArt2-1.jpg")
    set oldFile to open for access file fileName with write permission
    write 0 to oldFile
    close access oldFile
    delete file fileName
    if process "iTunes" exists then
        tell application "iTunes"
            if (player state is not stopped) then
                -- get the raw bytes of the artwork into a var
                tell application "iTunes" to tell artwork 1 of current track
                    set srcBytes to raw data
                end tell
                -- write to file
                set outFile to open for access file fileName with write permission
                -- truncate the file
                set eof outFile to 0
                -- write the image bytes to the file
                write srcBytes to outFile
                close access outFile
            end if
        end tell
        tell desktop 2
            set picture to fileName
        end tell
    end if
    set fileName to (((path to desktop) as text) & ".iTunesArt2-2.jpg")
    set oldFile to open for access file fileName with write permission
    write 0 to oldFile
    close access oldFile
    delete file fileName
    if process "iTunes" exists then
        tell application "iTunes"
            if (player state is not stopped) then
                -- get the raw bytes of the artwork into a var
                tell application "iTunes" to tell artwork 1 of current track
                    set srcBytes to raw data
                end tell
                -- write to file
                set outFile to open for access file fileName with write permission
                -- truncate the file
                set eof outFile to 0
                -- write the image bytes to the file
                write srcBytes to outFile
                close access outFile
            end if
        end tell
        tell desktop 2
            set picture to fileName
        end tell
    end if
end tell

Я получил фактический код, который сохраняет художественное произведение в файл отсюда .

Рабочий стол не будет обновляться, если вы не дадите ему новое имя файла для обновления, поэтому я продублировал процесс с «iTunesArt2-1» и «iTunesArt2-1».

Первые 2 в ‘ 2-1 ‘или’ 2-2 ‘ просто означает второй рабочий стол, так как у меня есть два разных приложения, чтобы изменить каждый рабочий стол, и использовать мой 2-й Рабочий стол для тестирования.

Все применение установлено к петле на 1000 лет, используя 3 отдельно функции петли в Automator (720 минут, 730 времен & 1000 времен).

При первой попытке отладить эту проблему процесс был дублирован в четыре отдельных сценария, один для сохранения образа, затем установка в качестве фона и еще два сценария для повторения процесса с новым именем файла.

Вот пример моей отладки:

  1. Я удаляю период открытия из «.iTunesArt##.jpg», чтобы я мог видеть файлы на моем рабочем столе.
  2. Я играю песню Coldplay и запускаю приложение в Automator, чтобы установить фон.
  3. «iTunesArt2-1.jpg » и » iTunesArt2-2.jpg » отображаются на моем рабочем столе с правильным оформлением альбома.
  4. Я останавливаю приложение и играю песню Paramore.
  5. Запускаю первый скрипт приложения (сохраняет обложку альбома).
  6. «iTunesArt2-1.jpg » обновлен до обложки Paramore.
  7. Запускаю второй скрипт приложения (устанавливает фоновое изображение).
    Обратите внимание, что этот сценарий должен устанавливать фон для изображения Paramore.
  8. Фон остается установленным на изображение Coldplay.

Сначала я думаю, что это только потому, что фоновое изображение было уже установлено на » iTunesArt2-1.jpg», и поэтому система не будет пытаться обновить его снова, не зная, что данные в файле были изменены.

Поэтому я запускаю следующий скрипт, который должен заставить фон обновляться:

  1. Я запускаю третий сценарий в приложении.
  2. «iTunesArt2-2.jpg » обновлен до обложки Paramore.
  3. Я запускаю четвертый скрипт в приложении.
  4. Фон рабочего стола обновляется до иллюстрации Paramore.

Таким образом, мы можем подтвердить, что скрипты 3 и 4 работали правильно.
Согласно коду, когда приложение возвращается к сценариям 1 и 2, фон рабочего стола должен оставаться в качестве иллюстрации Paramore.
НО.

  1. Я запускаю первый скрипт в приложении.
  2. «iTunesArt2-1.jpg » остается произведением искусства Paramore (как и должно быть).
  3. Я запускаю второй скрипт в приложении.
    Этот сценарий должен обновить фон рабочего стола от «» iTunesArt2-2.jpg » (Paramore) в «iTunesArt2-1.jpg » (Paramore).
  4. Фон рабочего стола изменяется на обложку Coldplay.

Теперь это вообще не имеет смысла.

Это будет происходить каждый раз, когда я просматриваю сценарии.
Скрипт 4 изменит рабочий стол на Paramore, а скрипт 2 — обратно на Coldplay.

Помните, что эта проблема возникает только в том случае, когда на одном и том же дисплее открывается полноэкранное приложение, которое обновляется. то есть. Полноэкранное приложение, открытое на моем основном дисплее, не имеет значения.

Я обнаружил, что иногда, скользнув к полноэкранному приложению и «активируя» его, он остановит мерцание, и фон будет установлен правильно.

Там, конечно, нет ничего «неправильно» с моим кодом есть? Если нет, мне нужен способ обойти эту проблему.

В частности, есть ли способ «активировать» каждое полноэкранное приложение в фоновом режиме, не перемещаясь в эти пространства?

Я бы очень хотел, чтобы у него была эта программа, но она должна быть в состоянии работать при любых обстоятельствах.

Любая помощь была бы очень признательна.

1 ответ

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

    screenNum указывает, на какой экран установлен рабочий стол.

        set randID to screenNum
    set randLoop to 0
    repeat while randLoop is not 9
        set randNum to (random number from 0 to 9) as text
        set randID to randID & randNum
        set randLoop to randLoop + 1
    end repeat
    

    Затем включается randIDв имя файла при его создании.

    Не заметил никакого мерцания с помощью этого метода.

    Примечание: это решает мою проблему, но не отвечает на мой первоначальный вопрос о том, как можно активировать полноэкранное приложение в фоновом режиме.