복붙노트

[SWIFT] 프로그래밍 스크린 샷 | 스위프트 3, 맥 OS

SWIFT

프로그래밍 스크린 샷 | 스위프트 3, 맥 OS

해결법


  1. 1.그것의 가능한 예. 이 기능은 JPG 파일로 지정된 경로에 연결된 모든 모니터의 스크린 샷과 쓰기를합니다. 유닉스 타임 스탬프로 파일 이름을 생성합니다.

    그것의 가능한 예. 이 기능은 JPG 파일로 지정된 경로에 연결된 모든 모니터의 스크린 샷과 쓰기를합니다. 유닉스 타임 스탬프로 파일 이름을 생성합니다.

     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)
    }
    

  2. 2.

    let displayID = CGMainDisplayID()
    let imageRef = CGDisplayCreateImage(displayID)
    
  3. from https://stackoverflow.com/questions/39691106/programmatically-screenshot-swift-3-macos by cc-by-sa and MIT license