Applescript per modificare il posizionamento dello sfondo del desktop (ad esempio, Riempi allo schermo

0

Ho lo script

tell application "System Events"
    tell every desktop
        set picture to "/Users/jackson/Pictures/Backgrounds/backpic.jpg"
    end tell
end tell

Questo cambia lo sfondo del desktop in un'immagine specifica. L'impostazione predefinita è "Riempi schermo", che non mi piace. Tuttavia, non riesco a scrivere le dimensioni.

Modifica: il predefinito sembra essere quello che era destinato a durare, ma mi piacerebbe comunque sapere se puoi controllarlo da AppleScript

Ho letto qui che potrebbe non essere possibile scrivere direttamente la risposta (anche se potrebbe essere cambiata da allora), ma stavo pensando che ci sia probabilmente uno script GUI che potrebbe essere fatto. Qualcuno ha qualche idea?

    
posta Talos Potential 24.11.2018 - 18:55
fonte

1 risposta

0

Ho riflettuto su questo argomento per un po 'di tempo e, con l'aiuto di questa risposta qui , ho ideato un AppleScriptObjc script che, su High Sierra almeno (ma dovrebbe funzionare anche su Mojave ), consente alcune personalizzazioni sul modo in cui l'immagine di sfondo del desktop viene ridimensionata alla schermata (principale):

use framework "AppKit"
--------------------------------------------------------------------------------
# PROPERTY DECLARATIONS:
property this : a reference to current application

property NSWorkspace : a reference to NSWorkspace of this
property NSScreen : a reference to NSScreen of this
property NSColor : a reference to NSColor of this
property NSDictionary : a reference to NSDictionary of this

property fit : 1 -- NSImageScaleAxesIndependently (will never clip)
property centre : 2 -- NSImageScaleNone (will never clip)
property best : 3 -- NSImageScaleProportionallyUpOrDown (no clipping)
property fill : 3.1 -- NSImageScaleProportionallyUpOrDown (clipping)

property black : {0, 0, 0}
property white : {100, 100, 100}
property grey50 : {50, 50, 50}
property red : {100, 0, 0}
property green : {0, 100, 0}
property blue : {0, 0, 100}
--------------------------------------------------------------------------------
# IMPLEMENTATION:
on run
    scaleDesktopImage to fill over blue
end run
--------------------------------------------------------------------------------
# HANDLERS:
to scaleDesktopImage to scalingOption over {r, g, b} : {50, 50, 50}
    local scalingOption -- fit, centre, fill
    local r, g, b -- 0 to 100

    set clipping to false
    if scalingOption is not in [fit, centre, best, fill] then return false
    if scalingOption = fill then set clipping to true

    set sharedWorkspace to NSWorkspace's sharedWorkspace()
    set mainScreen to NSScreen's mainScreen()

    set options to {NSWorkspaceDesktopImageScalingKey:scalingOption ¬
        , NSWorkspaceDesktopImageAllowClippingKey:clipping ¬
        , NSWorkspaceDesktopImageFillColorKey:RGB(r, g, b)}

    set imageURL to sharedWorkspace's desktopImageURLForScreen:mainScreen

    set [success, E] to sharedWorkspace's setDesktopImageURL:imageURL ¬
        forScreen:mainScreen options:options |error|:(reference)

    if E = missing value then return success
    E's localizedDescription() as text
end scaleDesktopImage


on RGB(r as real, g as real, b as real)
    NSColor's colorWithCalibratedRed:r / 100 ¬
        green:g / 100 ¬
        blue:b / 100 ¬
        alpha:1.0
end RGB
---------------------------------------------------------------------------❮END❯

Se non hai familiarità con AppleScriptObjC, osserva che lo script è suddiviso in tre sezioni: PROPERTY DECLARATIONS , IMPLEMENTATION e HANDLERS , il primo e l'ultimo dei quali ti suggerisco di non provare ad aggiustare troppo o affatto, a meno che non sia un esercizio di apprendimento.

Detto questo, sono sicuro che non andrai molto male se decidi di aggiungere le tue proprietà personalizzate per il colore al raggruppamento nelle sezioni PROPERTY DECLARATIONS , ognuna delle quali è semplicemente un Elenco di 3 elementi che specifica le componenti di colore rosso, verde e blu con valori compresi tra 0 (contributo zero) e 100 (contributo completo).

La seconda sezione dello script, con in testa IMPLEMENTATION , è il bit funzionale contenente il gestore esplicitamente dichiarato (solo per chiarezza) run . Il comando singolare è una chiamata al gestore scaleDesktopImage , che è la linea con la quale vorresti giocare per soddisfare le tue esigenze.

Ci vogliono due forme, che illustrerò con l'esempio:

scaleDesktopImage to fill over blue

o

scaleDesktopImage to fill

In altre parole, specificare il colore su cui è posata l'immagine del desktop (ovvero il colore di sfondo) è facoltativo. Se omesso, il colore di sfondo viene impostato su grigio al 50%. Ovviamente, non è necessario utilizzare una proprietà pre-dichiarata per specificare il colore di sfondo; puoi fornire direttamente un elenco di valori RGB:

scaleDesktopImage to best over {100, 25, 50}

Il parametro rimanente è obbligatorio e ci sono quattro possibili valori nominali:

  • fit : estende l'immagine per adattarla alla larghezza e all'altezza del desktop;
  • centre : centra l'immagine senza ingrandirla, tuttavia ridurrà la dimensione di un'immagine che altrimenti si riverserebbe fuori dal bordo del desktop;
  • best : Ingrandisce o riduce la dimensione dell'immagine per occupare l'area massima possibile del desktop senza che va oltre il limite del desktop e preserva le proporzioni dell'immagine, cioè una regolazione proporzionale delle dimensioni;
  • fill : consente di ridimensionare l'immagine per coprire l'intera area del desktop, mantenendo le proporzioni, ma estendendosi oltre il limite del desktop lungo uno dei suoi assi, se necessario, al fine di coprire lo sfondo.
risposta data 30.11.2018 - 08:01
fonte

Leggi altre domande sui tag