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