2014-10-24 4 views
2

Можно ли сделать скриншоты запущенной программы (с графическим интерфейсом) из другой программы python? Если да, то какими могут быть шаги и библиотеки, которые я мог бы использовать? (В Windows)Как захватить вывод экрана запущенной программы?

Например, скажем, у меня есть программа calc.exe. Я хочу сделать скриншоты того, что отображается пользователю с myprogram.py.

Моя цель - проанализировать, что отображается в контролируемой программе.

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

+0

анализ дисплея не очень практично и очень ломкий ... Я думаю, что вы атакуете эту проблему неправильно, но быстро Google придумал бы с https://pypi.python.org/pypi/pyscreenshot, в котором четко указано, что он позволяет захватить область экрана ... возможно, вы могли бы подробнее рассказать о том, почему вы хотите делать скриншоты и анализировать их ... может быть лучший путь для принятия –

+0

[PIL] (https : //pypi.python.org/pypi/Pillow/2.6.1) имеет [модуль захвата экрана] (http://effbot.org/imagingbook/imagegrab.htm). Поиск координат окна, вероятно, потребует логики, специфичной для ОС. – Kevin

ответ

3

Захват снимка экрана очень просто. Просто установите Python Imaging Library и используйте функцию ImageGrab.grab(), чтобы вернуть экземпляр изображения с снимком экрана.

Захват указанного окна немного сложнее, потому что вам нужны координаты окна. Я рекомендую вам установить модули win32api и использовать небольшой модуль под названием winGuiAuto.py. Как только вы это сделаете, вы можете сделать что-то вроде этого:

hwnd = winGuiAuto.findTopWindow(title) 
rect = win32gui.GetWindowPlacement(hwnd)[-1] 
image = ImageGrab.grab(rect) 

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

В большинстве случаев проще использовать windows api для непосредственного чтения содержимого элементов окна, но это не сработает с некоторыми сторонними инструментами GUI. Это не входит в сферу вашего вопроса, поэтому я не детализирую его здесь, но вы должны прочитать источник упомянутого выше модуля winGuiAuto.py для примеров того, как это сделать, а также проверить библиотеку pywinauto.

+0

Спасибо за ваш ответ, это именно то, что я хотел! –

+0

+1 для повторного повторения, что редко захватывает и анализирует скриншот правильного решения проблемы –

+0

Да, я думал, что у меня не было других решений, потому что программа, которую я хотел проанализировать, была построена с использованием adobe air. Но я только что обнаружил, что текстовый файл генерируется со всей информацией, которую я хочу ... так что это здорово для меня. Но я собираюсь взглянуть на win32api и winGuiAuto, это очень интересно! –

2

Модуль ImageGrab работает только с Windows. Модуль pyscreenshot, является лучшей заменой для этого, может быть использован для копирования содержимого экрана в память изображения PIL или Pillow. Подробнее см. Ссылку ниже.

https://pypi.python.org/pypi/pyscreenshot

Смежные вопросы