Что лучший способ состоит в том, чтобы сделать снимки экрана Окна с C++ в Windows?

Для меня самый pythonic * путь следующий: в значительной степени делает то же самое , но использует оператор + для конкатенации отдельных символов в каждой строке:

res = "".join(i + j for i, j in zip(u, l))
print(res)
# 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'

Это также быстрее, чем использование двух вызовов join():

In [5]: l1 = 'A' * 1000000; l2 = 'a' * 1000000

In [6]: %timeit "".join("".join(item) for item in zip(l1, l2))
1 loops, best of 3: 442 ms per loop

In [7]: %timeit "".join(i + j for i, j in zip(l1, l2))
1 loops, best of 3: 360 ms per loop

Существуют более быстрые подходы, но они часто обфускают код.

Примечание: если два входа строки не одинаковой длины, а более длинная будет усекаться, поскольку zip останавливает итерацию в конце более короткой строки. В этом случае вместо zip следует использовать zip_longest ( izip_longest в Python 2) из ​​модуля itertools в убедитесь, что обе строки полностью исчерпаны.


* Чтобы взять цитату из , Zen of Python : число читаемости. Pythonic = читаемость для меня; i + j просто визуально анализируется легче, по крайней мере для моих глаз.

36
задан GEOCHET 27 February 2009 в 23:42
поделиться

2 ответа

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

27
ответ дан Shog9 10 October 2019 в 11:11
поделиться

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

keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_SILENT, 0);

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

Вынимание его из буфера буфера обмена оставляют как осуществление для читателя.

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

4
ответ дан Daemin 10 October 2019 в 11:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: