Найти - Пользователи
Полная версия: изменить разрешение экрана в Win7 /XP
Начало » Python для новичков » изменить разрешение экрана в Win7 /XP
1
MantisABC
есть древняя (FoxPro 6) программа, которая запускается и у нее кнопки управления в самом низу, которые не видны на большом разрешении ( какое-то дикое масштабирование наоборот ) ( я вынужден ее сопровождать - программу и кнопки тоже :-) ), если в ярлыке прописать режим совместимости
и 640x480 ( все под Win7) работает, но на некоторых комп. оно после выхода из программы восстанавливает нормальное ( большое ) разрешение экрана, а на некоторых - нет.
а вручную поменять разрешение бедным пользователям приходится очень часто, т.к. используют много программ.
Мониторы у всех большие - по 20 дюймов, разрешение в-среднем 1920х1800

так вот, решил приделать к ярлыку перед-после запуска *.py, чтобы гарантированно менял разрешение
понятно, что надо pywin32. Нашел, установил. в инете полно примеров [ посмотреть, какое разрешение экрана] и даже с wxPython и др. а вот изменить нет.


Вот “посмотреть разрешение” работающий у меня:

from win32api import GetSystemMetrics
width = GetSystemMetrics (0)
height = GetSystemMetrics (1)
print “Screen resolution = %dx%d” % (width, height)

на изменить разрешение нашел в документации функцию WinAPI ( в PyWin32 то бишь)
не понимая, ( там примера для этого не было, читал на MS сайте про WinAPI) набил вот это, и оно даже не ругается, но и не меняет разрешение, просто отрабатывает и все: ( ну, типа изменить на 800x600 для почина )

from win32api import ChangeDisplaySettings
dm = EnumDisplaySettings(None, 0)
dm.PelsHeight = 800
dm.PelsWidth = 600
ChangeDisplaySettings(dm, 1)


и к примеру
dm.PelsHeight = 768
dm.PelsWidth = 1024
тоже не помогает, хотя “в мониторе” такие режимы есть

помогите, пожалуйста !


vkopey
Может это поможет:
Your text to link here…
MantisABC
Спасибо огромное ! Все удалось.

может кому надо,
отчет вот:
Процесс из 2-х частей.
ну, кроме Питона надо PyWin32, например вот: pywin32-217.win32-py2.7.exe

1) определяем список разрешений на данном компьютере
( они на многих очень даже разные )
Этот список желательно в файл ( потом почитать перед сном )
например так:
python “py27(win)_screen_res07_00.py” > abc

в файле abc окажется огромный списочек:
часть вот:
=======
((32L, 1024L, 768L, 60L), <PyDEVMODEA object at 0x00BAFC78>)
((16L, 320L, 240L, 60L), <PyDEVMODEA object at 0x00B10DA0>)
((8L, 480L, 360L, 60L), <PyDEVMODEA object at 0x00BC4E18>)
((16L, 640L, 480L, 60L), <PyDEVMODEA object at 0x00C0DAF0>)
((32L, 800L, 600L, 60L), <PyDEVMODEA object at 0x00BAFB40>)
((4L, 800L, 600L, 1L), <PyDEVMODEA object at 0x00BB0158>)
…..
==========
нахожу нужное, например: (32L, 1280L, 1024L, 75L)
в переводе на русский: 32 бита, 1280х1024, 75 Гц
и вставляю эту строку в нужное место ( см. ниже)
===========
итого:
1-й файл - как отсмотреть режимы,
2-й файл - как поменять на нужный режим.
===
1-й файл вот:
# ====== начало 1-го файла ======
########################################

# -*- coding: utf-8 -*-

import os, sys

import win32api
import win32con
import pywintypes

display_modes = {}


n = 0
while True:
try:
devmode = win32api.EnumDisplaySettings (None, n)
except pywintypes.error:
break
else:
key = (
devmode.BitsPerPel,
devmode.PelsWidth,
devmode.PelsHeight,
devmode.DisplayFrequency
)
display_modes = devmode
n += 1


# выводим все режимы дисплея на моем компьютере в виде нужной структуры

for item in display_modes.items():
print item

# ======конец 1-го файла =============

# ====== начало 2-го файла (меняем разрешение экрана)
#########################################

# -*- coding: utf-8 -*-

### ===================
### 1280 x 1024
### ===================

# какое разрешение было “до того”

from win32api import GetSystemMetrics

width = GetSystemMetrics (0)
height = GetSystemMetrics (1)

print “Screen resolution до изменения = %dx%d” % (width, height)


# ======= взято из (см. ниже) ==========
# http://bytes.com/topic/python/answers/660265-how-change-display-screen-resolution-800x600
# ========= начало цитаты ========

import os, sys

import win32api
import win32con
import pywintypes

display_modes = {}


n = 0
while True:
try:
devmode = win32api.EnumDisplaySettings (None, n)
except pywintypes.error:
break
else:
key = (
devmode.BitsPerPel,
devmode.PelsWidth,
devmode.PelsHeight,
devmode.DisplayFrequency
)
display_modes = devmode
n += 1


## надо, скажем вот этот режим (32L, 1280L, 1024L, 75L)
## ставим его в mode_required
### ===================
### 1280 x 1024
### ===================

mode_required = (32L, 1280L, 1024L, 75L)
devmode = display_modes
win32api.ChangeDisplaySettings (devmode, 0)

# ========= конец цитаты ========

# ============================

# какое разрешение было “после того”
# если не заметили изменений на экране, так хоть почитаете :-)

width = GetSystemMetrics (0)
height = GetSystemMetrics (1)

print “Screen resolution после изменения = %dx%d” % (width, height)

# ============================





This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB