Каков наилучший способ сделать скриншоты окна с C ++ в Windows? - PullRequest
36 голосов
/ 10 февраля 2009

Каков наилучший (самый простой) способ сделать снимок экрана работающего приложения с C ++ под Windows?

Ответы [ 3 ]

26 голосов
/ 10 февраля 2009

Вы должны получить контекст устройства окна (GetWindowDC()) и скопировать из него изображение (BitBlt()). В зависимости от того, что еще вы знаете о приложении, вы будете использовать разные методы, чтобы найти, какой дескриптор окна передать в GetWindowDC().

4 голосов
/ 03 марта 2009

В документации по функции keybd_event указано, что вы можете использовать ее, чтобы сделать снимок экрана и сохранить его в буфере обмена. Например:

keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_SILENT, 0);

В моей версии (справка Visual Studio 2005, установленная на моем компьютере) говорится, что вы можете сделать снимок экрана всего рабочего стола, установив для второго параметра значение 0, или снимок экрана только текущего приложения, установив его на 1 .

Извлечение его из буфера обмена оставлено читателю в качестве упражнения.

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

0 голосов
/ 13 августа 2017

Вот пример код
Вы можете сделать CaptureAnImage(GetDesktopWindow());, чтобы сделать снимок экрана.

...