Erhalten Sie den Desktop -Hintergrund in Kakao
-
24-10-2019 - |
Frage
Ich muss etwas Vollbild-App machen, was normalerweise nicht das Problem wäre. Das Problem ist nun, dass ich den Desktop des Benutzers haben muss, aber ohne Symbole als Hintergrund meines Vollbildfensters, ähnlich wie LartPad in 10.7. Ich habe einen Hinweis auf den Desktop -Hintergrund in Apfelskript erhalten:
tell application "Finder"
set a to desktop picture
end tell
Das gibt mir so etwas: document file "100930-F-7910D-001.jpg" of folder "Pictures" of folder "Fighter Jet Stuff" of folder "Desktop" of folder "tristan" of folder "Users" of startup disk of application "Finder"
was ich einfach nicht herausfinden konnte, um auf einen regulären Weg zu gelangen.
Ich habe versucht zu tun set a to desktop picture as POSIX path
Aber das macht mich auf mich. Irgendeine Idee, wie ich dies in Kakao machen könnte, indem ich das obige AppleScript benutze, um den Pfad oder noch besser ohne AppleScript zu erhalten? Ich möchte mich nicht auf das spezifische Format eines Plistes verlassen, der diese Informationen speichern könnte, da es das Potenzial hat, später zu brechen. Ich denke, es könnte einen Rahmen geben, von dem ich einfach nichts weiß ...
Lösung
Die Methoden, nach denen Sie suchen, sind in NsWorkspace erhältlich.
– desktopImageURLForScreen:
– setDesktopImageURL:forScreen:options:error:
– desktopImageOptionsForScreen:
Bitte werfen Sie einen Blick auf die Dokumentation hier: NSWORKSPACE -Klassenreferenz
Andere Tipps
Wenn Sie nur die aktuelle Tapete benötigen, können Sie einen Screenshot davon machen:
extension NSImage {
static func desktopPicture() -> NSImage {
let windows = CGWindowListCopyWindowInfo(
CGWindowListOption.OptionOnScreenOnly,
CGWindowID(0))! as NSArray
var index = 0
for var i = 0; i < windows.count; i++ {
let window = windows[i]
// we need windows owned by Dock
let owner = window["kCGWindowOwnerName"] as! String
if owner != "Dock" {
continue
}
// we need windows named like "Desktop Picture %"
let name = window["kCGWindowName"] as! String
if !name.hasPrefix("Desktop Picture") {
continue
}
// wee need the one which belongs to the current screen
let bounds = window["kCGWindowBounds"] as! NSDictionary
let x = bounds["X"] as! CGFloat
if x == NSScreen.mainScreen()!.frame.origin.x {
index = window["kCGWindowNumber"] as! Int
break
}
}
let cgImage = CGWindowListCreateImage(
CGRectZero,
CGWindowListOption(arrayLiteral: CGWindowListOption.OptionIncludingWindow),
CGWindowID(index),
CGWindowImageOption.Default)!
let image = NSImage(CGImage: cgImage, size: NSScreen.mainScreen()!.frame.size)
return image
}
}