2017-09-05 2 views
1

私はデスクトップの背景画像を定期的に変更するための小さなアプリを作っています。macOSでは、別々の「スペース」/デスクトップごとに(プログラムで)壁紙を設定できますか?

私のプログラムでは、このコードブロックが含まれています

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

これは動作しますが、キーボードのみに着目し、現在の「空間」のために。

私がフルスクリーンのアプリを使用している場合、フルスクリーンの占有アプリの背景のみが変更されます(通常のデスクトップの背景ではありません)。 私は2つのスペース/デスクトップを持っている場合、それらのいずれかの背景画像のみを変更します。

プログラムごとにスペースごとに壁紙を個別に設定することはできますか?

答えて

0

すべての画面を取得してそれらのすべてを設定することができます。

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

仮想デスクトップ(スワイプで切り替えるもの)の背景イメージを変更したいと思います。 'NSScreen.screens()'は各物理ディスプレイの画面のみを返します。 – PKBeam

0

使用すると、これはXcodeの8.xで:この1つは、現在のXcode 8 NSScreen.screensで動作しますここに掲載他のソリューションとは異なり

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

現在ベータ版のXcode 9(中クラスVARです)クラスfuncがXcode 8にあります。そのため.screensではなく.screens()を入力する必要があります。また、screensはオプションであるため、安全にループを外してからforループに渡す必要があります。

+0

私はおそらく明確にする必要があります... "スペース" /デスクトップ私はあなたが3つの4指の水平スワイプでナビゲートできる仮想デスクトップを意味します。 'NSScreen.screens()'は物理ディスプレイの画面しか返しませんので、使用できません。 – PKBeam

+0

おそらく[類似のポスト](https://stackoverflow.com/questions/14586289/setting-the-desktop-background-on-all-spaces-in-cocoa)が役立ちます。 –

関連する問題