如何在 Mac OS X 中以编程方式截取桌面区域的屏幕截图?
6 回答
我见过的两个有趣但尚未专业使用的选项是屏幕捕获实用程序和 MacFuse 演示。
根据手册页,screencapture 实用程序从 10.2 开始就已经存在,并且可以通过使用 NSTask 链接到 Cocoa 应用程序。
MacFuse 演示通过在每次打开文件夹时创建一个新的屏幕截图来工作,或者类似的东西。这个想法是您可以编写一个快速脚本来在需要时访问图像,而不必让脚本在该机器上实际运行。
但说真的,Apple 有一些名为“Son of Grab”的示例代码,它使用了非常棒的新 CGWindow API。
这样做的一种方法是将 NSTask 与“screencapture”命令行命令结合使用。
例如:
NSTask *theProcess;
theProcess = [[NSTask alloc] init];
[theProcess setLaunchPath:@"/usr/sbin/screencapture"];
// use arguments to set save location
[theProcess setArguments:@"blahblah"];
[theProcess launch];
你可以在任何你告诉它保存的地方打开文件,处理它,然后根据需要删除它。显然权宜之计,但它会起作用。
如果你对 Leopard 的兼容性很好,有一个非常强大的新 CGWindow API,它可以让你抓取屏幕截图、窗口截图或任何范围的窗口层的合成。
Qt 在examples\desktop\screenshot 中包含一个示例截图应用程序。Qt 适用于一系列平台,包括 MacOSX。
如果您尝试使用 C++ 或 python 完成此操作,以下内容可能会有所帮助。此外,如果您希望您的编程方法是跨平台可移植的,这将更有帮助。(Windows、Linux、Mac osx 甚至更高版本)
较早的回复提到了 QT。
就像 QT 允许您捕获和保存屏幕截图一样,另一个“竞争”框架也如此,即 wxWidgets。wxWidgets 是一个 C++ 框架,但它也通过 wxPython 提供 python 绑定。
要阅读更多内容,请使用以下链接,在本书中搜索wxScreenDC,然后从与搜索匹配的页面列表中选择“第 139 页”:
http://books.google.com/books?id=CyMsvtgnq0QC&vq="accessing+the+screen+with+wxScreendc"
如果您考虑 REALbasic,那么使用 RB 和 MBS 插件非常容易做到这一点。我刚刚编写了一个使用 RB 和 MBS 插件进行定时截图的应用程序。你可以在这里阅读:http: //tektalkin.blogspot.com/2008/08/screenaudit-for-mac-osx.html