【发布时间】:2010-09-07 12:36:11
【问题描述】:
如何在 Mac OS X 中以编程方式截取桌面区域?
【问题讨论】:
如何在 Mac OS X 中以编程方式截取桌面区域?
【问题讨论】:
Qt 在examples\desktop\screenshot 中包含一个示例截图应用程序。 Qt 适用于各种平台,包括 MacOSX。
【讨论】:
如果您考虑 REALbasic,使用 RB 和 MBS 插件非常容易做到这一点。我刚刚编写了一个使用 RB 和 MBS 插件进行定时截图的应用程序。你可以在这里阅读:http://tektalkin.blogspot.com/2008/08/screenaudit-for-mac-osx.html
【讨论】:
截屏实用程序和 MacFuse 演示是我见过的两个有趣但尚未专业使用的选项。
根据手册页,屏幕捕获实用程序从 10.2 开始就已经存在,并且可以通过使用 NSTask 链接到 Cocoa 应用程序。
MacFuse 演示的工作原理是在每次打开文件夹时创建一个新的屏幕截图,或类似的东西。这个想法是您可以编写一个快速脚本来在需要时访问图像,而不必让脚本在该机器上实际运行。
但是说真的,Apple 还有一些其他示例代码,称为“Son of Grab”,它使用了非常棒的新 CGWindow API。
【讨论】:
如果您尝试使用 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"
【讨论】:
执行此操作的一种方法是将 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,它可以让您抓取屏幕截图、窗口截图或任何范围的窗口层的合成。
【讨论】: