Swift 以编程方式更改墙纸
我正在制作一个以编程方式更改壁纸的应用程序。Swift 以编程方式更改墙纸,swift,macos,Swift,Macos,我正在制作一个以编程方式更改壁纸的应用程序。 这是我的密码: do{ let imgurl = NSURL.fileURL(withPath: self.app_path+self.wallpaper_folder_name+self.file_name); let workspace = NSWorkspace.shared(); if let screen = NSScreen.main(){ try workspace.setDesktopImage
这是我的密码:
do{
let imgurl = NSURL.fileURL(withPath: self.app_path+self.wallpaper_folder_name+self.file_name);
let workspace = NSWorkspace.shared();
if let screen = NSScreen.main(){
try workspace.setDesktopImageURL(imgurl, for: screen, options: [:]);
do{
print("Awesome !");
}
}
}catch{
print(error);
}
它正在(部分)工作
问题是:
如果我看着桌面,像这样更改墙纸:
它在工作:D
但如果我在全屏应用程序中更改壁纸,如下所示:
壁纸不会改变(没有错误)。那么,你知道为什么吗?如何解决呢
编辑
试图使用那个密码
let screens = NSScreen.screens()!;
print("SIZE : "+String(screens.count));
for screen in screens{
print("TRY ...");
try workspace.setDesktopImageURL(imgurl, for: screen, options: [:]);
do{
print("DONE");
}
}
但它会将我打印为“大小:1”(当我全屏使用应用程序时)…不要给我换墙纸://你检查了
NSScreen.main()
的值了吗?当另一个应用程序处于全屏模式时,这可能会干扰它?命令“print(screen)”会返回相同的结果:在所有情况下。只是猜测一下,但它可能会设置全屏窗口桌面的背景–当应用程序全屏运行时,操作系统会将其放入新的桌面。您是对的:NSScreen.main():返回包含具有键盘焦点的窗口的屏幕对象(查看编辑)