【问题标题】:How to take screenshot in Mac OS X using Cocoa or C++如何使用 Cocoa 或 C++ 在 Mac OS X 中截屏
【发布时间】:2010-09-07 12:36:11
【问题描述】:

如何在 Mac OS X 中以编程方式截取桌面区域?

【问题讨论】:

    标签: c++ cocoa macos


    【解决方案1】:

    Qt 在examples\desktop\screenshot 中包含一个示例截图应用程序。 Qt 适用于各种平台,包括 MacOSX。

    http://trolltech.com/products/qt/

    【讨论】:

      【解决方案2】:

      如果您考虑 REALbasic,使用 RB 和 MBS 插件非常容易做到这一点。我刚刚编写了一个使用 RB 和 MBS 插件进行定时截图的应用程序。你可以在这里阅读:http://tektalkin.blogspot.com/2008/08/screenaudit-for-mac-osx.html

      【讨论】:

        【解决方案3】:

        截屏实用程序和 MacFuse 演示是我见过的两个有趣但尚未专业使用的选项。

        根据手册页,屏幕捕获实用程序从 10.2 开始就已经存在,并且可以通过使用 NSTask 链接到 Cocoa 应用程序。

        MacFuse 演示的工作原理是在每次打开文件夹时创建一个新的屏幕截图,或类似的东西。这个想法是您可以编写一个快速脚本来在需要时访问图像,而不必让脚本在该机器上实际运行。

        但是说真的,Apple 还有一些其他示例代码,称为“Son of Grab”,它使用了非常棒的新 CGWindow API。

        http://developer.apple.com/samplecode/SonOfGrab/

        【讨论】:

          【解决方案4】:

          如果您尝试使用 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"

          【讨论】:

          • 谢谢!这是代码: wxBitmap GetScreenShot() { wxSize screenSize = wxGetDisplaySize(); wxBitmap 位图(screenSize.x, screenSize.y); wxScreenDC 直流; wxMemoryDC memDC; memDC.SelectObject(位图); memDC.Blit(0, 0, screenSize.x, screenSize.y, & dc, 0, 0); memDC.SelectObject(wxNullBitmap);返回位图; }
          【解决方案5】:

          执行此操作的一种方法是将 NSTask 与“screencapture”命令行命令结合使用。

          例如:

          NSTask *theProcess;
          theProcess = [[NSTask alloc] init];
          
          [theProcess setLaunchPath:@"/usr/sbin/screencapture"];
          // use arguments to set save location
          [theProcess setArguments:@"blahblah"];
          [theProcess launch];
          

          您可以在您要求保存的任何位置打开文件,对其进行处理,然后根据需要将其删除。显然是权宜之计,但它会起作用。

          【讨论】:

            【解决方案6】:

            如果您对 Leopard 的兼容性很好,有一个非常强大的新 CGWindow API,它可以让您抓取屏幕截图、窗口截图或任何范围的窗口层的合成。

            http://developer.apple.com/samplecode/SonOfGrab/

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-05-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-06-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多