Курсор исчезает на битблт - PullRequest
2 голосов
/ 04 августа 2009

У меня есть приложение Windows, которое счищает пиксели с экрана для записи (в виде видео) в пользовательский формат совместного использования экрана. Проблема состоит в том, что на машинах, использующих программный курсор, блики с экрана с помощью SRCCOPY | CAPTUREBLIT (чтобы на изображении также отображались многослойные окна) заставляют мигать курсор, как описано в Случай исчезающего курсора .

Для одиночных снимков экрана это не проблема, но когда несколько снимков экрана делаются в быстрой последовательности, курсор мигает так быстро, что иногда кажется, что он вообще исчезает.

Я рассмотрел использование Windows Media Encoder SDK (как описано в статье проекта кода, см. Ниже), поскольку он не вызывает мигание курсора, но, похоже, нет прямого доступа к данным кадра. К сожалению, как кодирование в реальном времени, так и пользовательский формат являются требованиями, что делает Windows Media Encoder непригодным для этой цели.

Я также попробовал способ DirectX (описанный в той же статье, см. Ниже), и, похоже, он страдает от той же проблемы.

Кто-нибудь еще сталкивался с этой проблемой? Должен быть способ обойти это - многие коммерческие программы совместного использования экрана не имеют такой проблемы.

статья: www.codeproject.com/KB/dialog/screencap.aspx

Ответы [ 5 ]

0 голосов
/ 21 июня 2016

вы можете использовать Magnification API в Windows Vista или позже. я не могу найти хорошую идею в Windows XP.

0 голосов
/ 30 апреля 2012

Просто скопируйте экран и курсор отдельно и наложите их.

0 голосов
/ 05 августа 2009

Вы правы, зеркало наверняка подойдет. Однако в данный момент я стараюсь держаться подальше от этого подхода из-за проблем с безопасностью и разрешениями при установке под пользователем без прав администратора. Поправьте меня, если я ошибаюсь, но я не думаю, что есть какой-либо способ установить драйвер без таких прав. Кроме того, кажется, что это будет излишне сложно: должен быть более простым / менее инвазивным способом сделать это. (Я должен был упомянуть об этом в моем первоначальном вопросе)

0 голосов
/ 30 апреля 2012

Идея, которую мне пришлось преодолеть, это «вручную» нарисовать «свою собственную копию мыши», затем сделать вызов BitBlt или вызвать BitBlt только с помощью SRCCOPY, а затем вручную захватить любые видимые прозрачные окна поверх верхней части окна. Это. Я не знаю, как это делает коммерческий материал (или, очевидно, кодировщик Windows Media).

ref: http://us.generation -nt.com / xp-bitblt-captureblt-option-help-26970632.html

0 голосов
/ 05 августа 2009

Как насчет использования драйвера зеркала?

...