只有镜像屏幕旋转 - Python

时间:2017-09-27 18:20:47

标签: python winapi pywin32

我遇到程序化监视器旋转问题

import win32api as win32
import win32con
MY_SCREEN_NUMBER = 1
device = win32.EnumDisplayDevices(None,MY_SCREEN_NUMBER)
dm = win32.EnumDisplaySettings(device.DeviceName,win32con.ENUM_CURRENT_SETTINGS)
dm.DisplayOrientation = win32con.DMDO_180
dm.Fields = dm.Fields & win32con.DM_DISPLAYORIENTATION
win32.ChangeDisplaySettingsEx(device.DeviceName,dm)

仅在相反方向编码旋转屏幕,例如

  • 如果win32con.DMDO_DEFAULT中的屏幕只能在win32con.DMDO_180中旋转它,
  • 如果win32con.DMDO_90中的屏幕仅在win32con.DMDO_270中旋转
  • 否则它会给我-2(DISP_CHANGE_BADMODE)错误代码

但我可以使用windows图形屏幕参数设置成功旋转它

如何正确旋转屏幕?

1 个答案:

答案 0 :(得分:1)

def rotateTo(degree):
   import win32api as win32
   import win32con
   MY_SCREEN_NUMBER = 1
   device = win32.EnumDisplayDevices(None,MY_SCREEN_NUMBER)
   dm = win32.EnumDisplaySettings(device.DeviceName,win32con.ENUM_CURRENT_SETTINGS)
   newDisplayOrientationInWin32Format = degree/90
   currentDisplayOrientationInWin32Format = dm.DisplayOrientation
   if(newDisplayOrientationInWin32Format + currentDisplayOrientationInWin32Format) % 2 == 1 : #test the new resolution on the perpendicular to the previous
       tmp = dm.PelsHeight
       dm.PelsHeight=dm.PelsWidth
       dm.PelsWidth=tmp
   dm.DisplayOrientation = newDisplayOrientationInWin32Format
   return win32.ChangeDisplaySettingsEx(device.DeviceName,dm)

我检查了https://msdn.microsoft.com/en-us/library/ms812499.aspx并找到了C示例,我需要交换高度和宽度,但是它们不会测试与前一个垂直的新分辨率。我用这个测试更新了代码,它开始在我的任何可能的屏幕方向上工作。