Форум сайта python.su
0
есть древняя (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
тоже не помогает, хотя “в мониторе” такие режимы есть
помогите, пожалуйста !
Отредактировано MantisABC (Апрель 27, 2012 15:33:47)
Офлайн
3
Может это поможет:
Your text to link here…
Офлайн
0
Спасибо огромное ! Все удалось.
может кому надо,
отчет вот:
Процесс из 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)
# ============================
Отредактировано MantisABC (Апрель 29, 2012 22:58:16)
Офлайн