Как и в названии, мне любопытно, есть ли способ настроить модуль ImageGrab.grab(), чтобы захватить, например, правый экран, а не левый в настройке с несколькими мониторами.Python PIL library - есть ли способ выбрать, какой экран ImageGrab.grab() захватывает в настройках с несколькими мониторами?
ответ
К сожалению, это невозможно из-за того, как PIL получает размеры дисплея. Когда он получает контекст устройства, он делает получить один для всех подключенных мониторов:
screen = CreateDC("DISPLAY", NULL, NULL, NULL);
(display.c, строка 296, версия 1.1.7)
Однако, чтобы получить дисплей размеры, он использует этот код:
width = GetDeviceCaps(screen, HORZRES);
height = GetDeviceCaps(screen, VERTRES);
(display.c, строки 299-300, версия 1.1.7)
Который только возвращает размеры основного, активного монитора. Все последующие операции выполняются с этими значениями ширины и высоты, что приводит к окончательному изображению, которое является только размером основного дисплея.
Для получения Screengrab от всех подключенных мониторов, эти две линии должны быть заменены чем-то вроде:
width = GetSystemMetrics(SM_CXVIRTUALSCREEN);
height = GetSystemMetrics(SM_CYVIRTUALSCREEN);
После чего вам нужно перекомпилировать PIL. Это предоставит вам размеры виртуального экрана, который является «... ограничивающим прямоугольником всех мониторов дисплея». [MSDN]
Более правильное применение будет использовать для получения EnumDisplayMonitors контекстов устройств для отдельных мониторов, наряду с изменением ImageGrab.grab() 'ы интерфейса (или добавления новой функции), чтобы учесть при выборе конкретных монитор, контекст устройства которого будет использоваться для остальных операций.
- 1. Есть ли способ изменить цвет заливки Python Imaging Library (PIL)?
- 2. PIL Image Library Python
- 3. Каков наилучший способ работы с несколькими мониторами?
- 4. VNC-просмотрщик с несколькими мониторами
- 5. Android Studio с несколькими мониторами
- 6. Python library PIL, загруженное изображение синее
- 7. Можно ли замаскировать изображение в Python Imaging Library (PIL)?
- 8. 3D-приложение с несколькими мониторами
- 9. Есть ли способ нарисовать текст с темной линией в PIL?
- 10. аппаратное ускорение с несколькими мониторами
- 11. Более быстрый способ чтения пикселя экрана в Python, чем PIL?
- 12. Как одновременно воспроизводить разные видео на разных мониторах в настройках с несколькими мониторами?
- 13. Django - как установить Python Image Library (PIL)
- 14. java awt setLocationRelativeTo с несколькими мониторами p
- 15. Запуск полноэкранного режима VNC с несколькими мониторами
- 16. Как использовать мультитач-приложение с несколькими мониторами?
- 17. проблемы Установка Python Imaging Library (PIL)
- 18. Python PIL Imagine Library (CYMK Issue Image)
- 19. Есть ли способ прочитать усеченный gif с PIL?
- 20. Python PIL помещает пиксель на экран
- 21. Есть ли способ определить, включена ли вибрация в настройках?
- 22. WPF TreeView Отображение Некорректно с несколькими мониторами
- 23. черный экран при использовании python PIL paste
- 24. Проблема с PIL python
- 25. Определение монитора MATLAB в конфигурации с несколькими мониторами
- 26. Есть ли способ запуска Python-скриптов в Atom с несколькими версиями Python?
- 27. Mavericks и пользовательский вид NSStatusItem с несколькими мониторами
- 28. Есть ли способ выбрать случайный конструктор для использования в python?
- 29. Есть ли какой-нибудь способ для двух строк в python?
- 30. Альтернатива GetWindowRect() для использования с несколькими мониторами?
В вашей второй реализации я смог найти ручки для мониторов через enumDisplayMonitors .. но для следующего шага мне понадобится C, или это можно сделать в модуле ImageGrab? Если я буду следовать за вами правильно, функция, которую я должен создать, должна будет изменить вызов CreateDC («DISPLAY», NULL, NULL), заменив «DISPLAY» для дескриптора устройства. Я хочу делать снимки? – Zack
Извините, что я не был чист, оба варианта требуют изменения исходного кода C для PIL и перекомпиляции. Вы правы, функция CreateDC - это то, что нужно изменить. – Andrew