如何模拟cmd-shift-4屏幕捕获界面?

时间:2011-06-09 06:15:04

标签: cocoa macos

我正在构建一个OSX应用程序,并希望使用与cmd-shift-4 UX类似的界面捕获屏幕的一部分,IE启动操作:

  1. 显示鼠标光标
  2. mouseDown并拖动,mouseUp捕获屏幕坐标,同时绘制半透明覆盖图以表示正在捕获的区域
  3. 我在http://code.google.com/p/captureme/中找到了一个很好的起点,它提供了一个NSPanel并捕获了面板内的区域。但是我想做得更好并模拟cmd-shift-4接口。

    我无法找到这样的内容(或者是否存在现有解决方案)。我想直接的方法是使用NSResponder并替换mouseDown上的光标,然后在鼠标拖动事件上绘制mouseDown点和当前光标位置之间的半透明矩形。如果我的想法是正确的,请告诉我。

    谢谢!

2 个答案:

答案 0 :(得分:4)

以下是您想要做的简单版本:在CGShieldingWindowLevel(),setIgnoresMouseEvents:NO创建一个全屏透明窗口,让视图将光标设置为您想要的任何内容,并实现拖动以绘制其中的选取框被拖拽的区域。

答案 1 :(得分:4)

您可以使用screencapture命令行工具。 这会将您的屏幕截图放到粘贴板上:

NSTask* task = [[NSTask alloc] init];
[task setArguments: [NSArray arrayWithObject: @"-ic"]];
[task setLaunchPath: @"/usr/sbin/screencapture"];
[task launch];
[task waitUntilExit];
[task release];
NSData* data = [[NSPasteboard generalPasteboard] dataForType: NSPasteboardTypePNG];

此外,您可以设置任务以将屏幕截图直接保存到文件中:

[task setArguments: [NSArray arrayWithObjects: @"-i", filePath, nil]];