Я работал над той же проблемой. Это код, который я придумал после поиска некоторое время.
CGImageRef screenShot = CGWindowListCreateImage( CGRectInfinite, kCGWindowListOptionOnScreenOnly, kCGNullWindowID, kCGWindowImageDefault);
//std::string image_name = "/Users/nikhil/Desktop/SC_";
//image_name+=str;
//cout<<str<<endl;
//image_name+=".jpg";
//cout<<image_name<<endl;
CFStringRef file = CFSTR("/Users/nikhil/Desktop/SC.jpg");
CFStringRef type = CFSTR("public.jpeg");
CFURLRef urlRef = CFURLCreateWithFileSystemPath( kCFAllocatorDefault, file, kCFURLPOSIXPathStyle, false );
CGImageDestinationRef image_destination = CGImageDestinationCreateWithURL( urlRef, type, 1, NULL );
CGImageDestinationAddImage( image_destination, screenShot, NULL );
CGImageDestinationFinalize( image_destination );
Вы должны задать статическую строку для CFSTR (). Хотя я сам ищу альтернативу для сохранения снимка экрана в файл с именем файла на основе отметки времени.