Как эмулировать интерфейс захвата экрана cmd-shift-4? - PullRequest
4 голосов
/ 09 июня 2011

Я создаю приложение OSX и хотел бы захватить часть экрана с интерфейсом, аналогичным интерфейсу cmd-shift-4 UX, IE, инициирующему действие:

  1. представляет курсор мыши
  2. mouseDown и перетаскивание, mouseUp захватывает координаты экрана при рисовании полупрозрачного наложения для обозначения области захвата

Я нашел хорошую отправную точку в http://code.google.com/p/captureme/, которая представляет NSPanel и захватывает область внутри панели. Однако я хотел бы сделать немного лучше и эмулировать интерфейс cmd-shift-4.

Я не могу найти, встроено ли что-то подобное (или есть существующее решение). Я предполагаю, что прямой путь - использовать NSResponder и заменить курсор на mouseDown, а затем при событии перетаскивания мыши нарисовать полупрозрачный прямоугольник между точкой mouseDown и текущим положением курсора. Дайте мне знать, если мои мысли верны.

Спасибо!

Ответы [ 2 ]

5 голосов
/ 10 июня 2011

Вот краткая версия того, что вы хотите сделать: создайте полноэкранное прозрачное окно в CGShieldingWindowLevel (), setIgnoresMouseEvents:NO, сделайте вид установленным курсором на то, что вы хотите, и реализуйте перетаскивание, чтобы нарисовать область в перетаскиваемой области.

4 голосов
/ 01 ноября 2012

Вы можете использовать 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]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...