Applescript para cambiar la posición del fondo del escritorio (por ejemplo, Rellenar en pantalla

0

Tengo el guión

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

Eso cambia el fondo de mi escritorio a una imagen específica. El valor predeterminado es "Pantalla de relleno", que no me gusta. Sin embargo, parece que no puedo escribir las dimensiones.

Editar: el valor predeterminado parece ser lo que se configuró para durar, pero todavía me gustaría saber si puedes controlarlo desde AppleScript

Leí aquí es posible que no sea posible escribir directamente la respuesta (aunque puede haber cambiado desde entonces), pero estaba pensando que probablemente se podrían realizar algunas secuencias de comandos GUI. ¿Alguien tiene alguna idea?

    
pregunta Talos Potential 24.11.2018 - 18:55

1 respuesta

0

Reflexioné e investigué esto por algún tiempo, y con la ayuda de esta respuesta aquí , he ideado un AppleScriptObjc script que, al menos en High Sierra (pero que también debería funcionar en Mojave ), permite cierta personalización sobre la forma en que la imagen de fondo del escritorio se ajusta a la pantalla (principal):

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❯

Si no está familiarizado con AppleScriptObjC, observe que el script está dividido en tres secciones: PROPERTY DECLARATIONS , IMPLEMENTATION y HANDLERS , el primero y el último de los cuales te sugiero que no intentes ajustar demasiado o nada, a menos que sea un ejercicio de aprendizaje.

Dicho esto, estoy seguro de que no te equivocarás si decides agregar tus propias propiedades de color personalizadas a la agrupación en las secciones PROPERTY DECLARATIONS , cada una de las cuales es simplemente una Lista de 3 elementos que especifica los componentes de color rojo, verde y azul con valores entre 0 (contribución cero) y 100 (contribución completa).

La segunda sección del script, titulada IMPLEMENTATION , es el bit funcional que contiene el controlador explícitamente declarado (solo por claridad) run . El comando singular es una llamada al controlador scaleDesktopImage , que es la línea con la que más desearás jugar para satisfacer tus necesidades.

Toma dos formas, que ilustraré con el ejemplo:

scaleDesktopImage to fill over blue

o:

scaleDesktopImage to fill

En otras palabras, la especificación del color sobre el que se coloca la imagen del escritorio (es decir, el color de fondo) es opcional. Si se omite, el color de fondo toma como valor predeterminado el 50% de gris. Por supuesto, no es necesario usar una propiedad declarada previamente para especificar el color de fondo; puede suministrar directamente una lista de valores RGB:

scaleDesktopImage to best over {100, 25, 50}

El parámetro restante es obligatorio, y hay cuatro valores con nombre posibles:

  • fit : Estira la imagen para que se ajuste al ancho y la altura del escritorio;
  • centre : Centra la imagen sin ampliarla, sin embargo reducirá el tamaño de una imagen que de lo contrario se derramaría fuera del límite del escritorio;
  • best : Amplía o reduce el tamaño de la imagen para ocupar el área máxima posible del escritorio sin salir del límite del escritorio y mantener la relación de aspecto de la imagen, es decir, un ajuste de tamaño proporcional;
  • fill : dimensiona la imagen para cubrir el área completa del escritorio, conservando la relación de aspecto, pero extendiéndose más allá del límite del escritorio a lo largo de uno de sus ejes si es necesario para cubrir el fondo.
respondido por el CJK 30.11.2018 - 08:01

Lea otras preguntas en las etiquetas