Скрипт для поиска активного файла обоев в Finder под macOS Catalina - PullRequest
0 голосов
/ 23 октября 2019

Я использовал два сценария AppleScript, чтобы узнать имя файла фактического изображения обоев с рабочего стола 1 и рабочего стола 2 (режим двойного монитора) под macOS Mojave. Один скрипт для основного монитора и еще один для второго монитора. Под macOS Catalina скрипты больше не работают.

Вот скрипт:

tell application "System Events"
    set posix_path to (pictures folder of desktop 2)
    set picPath to (POSIX file posix_path) as string
end tell
set thePictures to (do shell script "sqlite3 ~/Library/Application\\ Support/Dock/desktoppicture.db \"SELECT data.value FROM preferences INNER JOIN data on preferences.key=16 and preferences.picture_id=7 and preferences.data_id=data.ROWID\"")
set fullPath to picPath as string
set rotationImage to fullPath & thePictures
tell application "Finder"
    try
        set aliasItem to item rotationImage
        if class of aliasItem is alias file then
            reveal original item of aliasItem
        end if
    end try
end tell

Вот сообщение об ошибке:

tell application "System Events"
    get pictures folder of desktop 1
        --> "/Users/peter/Library/Caches/com.apple.preference.desktopscreeneffect.desktop/69948584/DSKPhotosRootSource"
    get POSIX file "/Users/peter/Library/Caches/com.apple.preference.desktopscreeneffect.desktop/69948584/DSKPhotosRootSource"
        --> error number -1728 from POSIX file "/Users/peter/Library/Caches/com.apple.preference.desktopscreeneffect.desktop/69948584/DSKPhotosRootSource"
end tell
tell current application
    do shell script "sqlite3 ~/Library/Application\\ Support/Dock/desktoppicture.db \"SELECT data.value FROM preferences INNER JOIN data on preferences.key=16 and preferences.picture_id=1 and preferences.data_id=data.ROWID\""
        --> "13725B"
end tell
tell application "Finder"
    get item "Macintosh HD:Users:peter:Library:Caches:com.apple.preference.desktopscreeneffect.desktop:69948584:DSKPhotosRootSource13725B"
        --> error number -1728 from item "Macintosh HD:Users:peter:Library:Caches:com.apple.preference.desktopscreeneffect.desktop:69948584:DSKPhotosRootSource13725B"
end tell

Попытался найти проблемуно не смог найти решение. Я не опытный писатель AppleScript. Надеюсь, что кто-нибудь может помочь.

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Я не могу гарантировать, что приведенный ниже код будет справедливым лучше, чем уже опубликованное решение, но теоретически он должен ориентироваться на изображения рабочего стола на экран (монитор), а не на рабочий стол (пространство). Однако у меня нет Мохаве, Каталины или компьютера, чтобы это проверить:

use framework "AppKit"

property NSScreen : a reference to NSScreen in the current application
property NSWorkspace : a reference to NSWorkspace in the current application

property currentScreen : a reference to the mainScreen of NSScreen

on screen(i as integer)
        local i

        if i = 0 then return the currentScreen()
        return NSScreen's screens()'s item i
end screen

on desktopImageURLForScreen:(i as integer)
        local i

        set S to screen(i)
        tell NSWorkspace's sharedWorkspace() to return the ¬
                desktopImageURLForScreen_(S) as «class furl»
end desktopImageURLForScreen:

return the POSIX path of my desktopImageURLForScreen:0

Суть в том, с чем вы, скорее всего, захотите поэкспериментировать, изменив номер индекса, переданный вобработчик. Если у вас есть три монитора, то каждый из них будет идентифицирован одним из индексов 1, 2 или 3 (я не могу предсказать, как индекс соответствует расположению мониторов). Индекс 0 всегда будет указывать на экран, на котором в данный момент находится фокус клавиатуры.

0 голосов
/ 24 октября 2019

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

tell application "System Events"
    set everyDesktop to desktops
    set desktopOnePicture to picture of item 1 of everyDesktop
    set desktopTwoPicture to picture of item 2 of everyDesktop
end tell
...