def GetDisplayModes(): res = [] displayDevice = DISPLAY_DEVICE() displayDevice.cb = sizeof(DISPLAY_DEVICE) devMode = DEVMODE() devMode.dmSize = sizeof(DEVMODE) iDevNum = 0 while True: if EnumDisplayDevices(None, iDevNum, pointer(displayDevice), 0) == 0: break iDevNum += 1 if displayDevice.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER: continue EnumDisplaySettingsEx( displayDevice.DeviceName, ENUM_CURRENT_SETTINGS, pointer(devMode), 0 ) displayMode = ( displayDevice.DeviceName, devMode.dmPosition.x, devMode.dmPosition.y, devMode.dmPelsWidth, devMode.dmPelsHeight, devMode.dmDisplayFrequency, devMode.dmBitsPerPel, bool( displayDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP ), bool(displayDevice.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE), devMode.dmDisplayFlags, ) res.append(displayMode) return tuple(res)
def SetDisplayMode(self, size, frequency, bitdepth, flags=0): devMode = DEVMODE() devMode.dmSize = sizeof(DEVMODE) devMode.dmPelsWidth = size[0] devMode.dmPelsHeight = size[1] devMode.dmBitsPerPel = bitdepth devMode.dmDisplayFrequency = frequency devMode.dmFields = ( DM_BITSPERPEL |DM_PELSWIDTH |DM_PELSHEIGHT |DM_DISPLAYFREQUENCY ) ChangeDisplaySettingsEx(self.deviceName, pointer(devMode), 0, flags, 0)
def GetDisplayModes(self, allModes=False): devMode = DEVMODE() devMode.dmSize = sizeof(DEVMODE) lpDevMode = pointer(devMode) modes = {} if allModes: flag = EDS_RAWMODE else: flag = 0 iModeNum = 0 while 0 != EnumDisplaySettingsEx(self.deviceName, iModeNum, lpDevMode, flag): iModeNum += 1 resolution = (devMode.dmPelsWidth, devMode.dmPelsHeight) deepthDict = modes.setdefault(resolution, {}) frequencyList = deepthDict.setdefault(devMode.dmBitsPerPel, []) frequencyList.append(devMode.dmDisplayFrequency) return modes
def GetDisplayModes(self, allModes=False): devMode = DEVMODE() devMode.dmSize = sizeof(DEVMODE) lpDevMode = pointer(devMode) modes = {} if allModes: flag = EDS_RAWMODE else: flag = 0 iModeNum = 0 while 0 != EnumDisplaySettingsEx( self.deviceName, iModeNum, lpDevMode, flag ): iModeNum += 1 resolution = (devMode.dmPelsWidth, devMode.dmPelsHeight) deepthDict = modes.setdefault(resolution, {}) frequencyList = deepthDict.setdefault(devMode.dmBitsPerPel, []) frequencyList.append(devMode.dmDisplayFrequency) return modes
def SetDisplayModes(*args): for ( deviceName, x, y, width, height, freq, bitdepth, isAttached, isPrimary, displayFlags ) in args: devMode = DEVMODE() devMode.dmSize = sizeof(DEVMODE) if isAttached: devMode.dmPosition.x = x devMode.dmPosition.y = y devMode.dmPelsWidth = width devMode.dmPelsHeight = height devMode.dmBitsPerPel = bitdepth devMode.dmDisplayFrequency = freq devMode.dmDisplayFlags = displayFlags devMode.dmFields = ( DM_POSITION |DM_BITSPERPEL |DM_PELSWIDTH |DM_PELSHEIGHT |DM_DISPLAYFLAGS |DM_DISPLAYFREQUENCY ) flags = (CDS_UPDATEREGISTRY | CDS_NORESET) if isPrimary: flags |= CDS_SET_PRIMARY ChangeDisplaySettingsEx(deviceName, pointer(devMode), 0, flags, 0) ChangeDisplaySettingsEx(None, None, 0, 0, 0)