2017-09-05 1 views
1

Ich mache eine kleine App für mich, um das Desktop-Hintergrundbild in regelmäßigen Abständen zu ändern.Kann man (programmatisch) Hintergrundbilder für jeden einzelnen "Space"/Desktop in macOS einstellen?

Mein Programm enthält diesen Codeblock:

let screen = NSScreen.main()! 
let newWallpaperURL = URL(/* ... */) 
// ... 
try! NSWorkspace.shared().setDesktopImageURL(newWallpaperURL, for: screen, options: [:]) 

Dies funktioniert, aber nur für den aktuellen „Raum“ der Tastatur konzentriert sich auf.

z.B. Wenn ich in einer Vollbild-App bin, wird nur der Hintergrund der Space-besetzten Vollbild-App geändert (nicht der Hintergrund meines normalen Desktops). Wenn ich zwei Spaces/Desktops habe, ändert sich nur das Hintergrundbild von einem von ihnen.

Ist es möglich, programmatisch individuell für jeden Raum Tapeten eingestellt?

Antwort

0

Sie können alle Bildschirme erhalten und alle von ihnen eingestellt.

let screens = NSScreen.screens 
let newWallpaperURL = URL(/* ... */) 
for i in screens { 
    try! NSWorkspace.shared().setDesktopImageURL(newWallpaperURL, for: i, options: [:]) 
} 
+0

Ich möchte das Hintergrundbild der virtuellen Desktops ändern (die, die Sie mit Seitenhiebe wechseln zwischen). 'NSScreen.screens()' gibt nur Bildschirme für jede physische Anzeige zurück. – PKBeam

0

verwenden in Xcode 8.x:

if let screens = NSScreen.screens() { 
    let newWallpaperURL = URL(/* ... */)) 
    for screen in screens { 
     try? NSWorkspace.shared().setDesktopImageURL(newWallpaperURL, for: screen, options: [:]) 
    } 
} 

Im Gegensatz zu anderen hier gepostet Lösungen dieses in der aktuellen Xcode arbeiten 8. NSScreen.screens ist ein Klasse var in Xcode 9 (derzeit Beta), sondern eine Klasse func in Xcode 8, weshalb Sie setzen .screens() statt .screens benötigen. Außerdem gibt screens einen optionalen Wert zurück, so dass Sie ihn sicher auspacken müssen, bevor Sie ihn an die for-Schleife übergeben.

+0

Ich sollte wahrscheinlich klarstellen ... von "Space"/Desktop Ich meine die virtuellen Desktops, die Sie mit drei-vier Finger horizontal Swipes navigieren können. 'NSScreen.screens()' gibt nur Bildschirme für physische Anzeigen zurück, so dass ich sie nicht verwenden kann. – PKBeam

+0

Vielleicht [dieser ähnliche Beitrag] (https://stackoverflow.com/questions/14586289/setting-the-desktop-background-on-all-spaces-in-cocoa) wird Ihnen helfen. –

Verwandte Themen