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ß ...

War es hilfreich?

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
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top