Programmatically Screenshot | Swift 3, macOS Programmatically Screenshot | Swift 3, macOS swift swift

Programmatically Screenshot | Swift 3, macOS


Yes its possible. This function takes all connected monitors screenshots and writes to specified path as jpg file. Generates file name as unix time stamp.

 func TakeScreensShots(folderName: String){        var displayCount: UInt32 = 0;    var result = CGGetActiveDisplayList(0, nil, &displayCount)    if (result != CGError.success) {        print("error: \(result)")        return    }    let allocated = Int(displayCount)    let activeDisplays = UnsafeMutablePointer<CGDirectDisplayID>.allocate(capacity: allocated)    result = CGGetActiveDisplayList(displayCount, activeDisplays, &displayCount)        if (result != CGError.success) {        print("error: \(result)")        return    }           for i in 1...displayCount {        let unixTimestamp = CreateTimeStamp()        let fileUrl = URL(fileURLWithPath: folderName + "\(unixTimestamp)" + "_" + "\(i)" + ".jpg", isDirectory: true)        let screenShot:CGImage = CGDisplayCreateImage(activeDisplays[Int(i-1)])!        let bitmapRep = NSBitmapImageRep(cgImage: screenShot)        let jpegData = bitmapRep.representation(using: NSBitmapImageRep.FileType.jpeg, properties: [:])!                        do {            try jpegData.write(to: fileUrl, options: .atomic)        }        catch {print("error: \(error)")}    }}func CreateTimeStamp() -> Int32{    return Int32(Date().timeIntervalSince1970)}


let displayID = CGMainDisplayID()let imageRef = CGDisplayCreateImage(displayID)