【问题标题】:Screen rotation in windows with python使用python在Windows中旋转屏幕
【发布时间】:2017-06-19 19:44:55
【问题描述】:

我正在尝试编写一个 python 脚本来在 Windows 中旋转屏幕。
我有使用 Win32api 的线索。
实现这一目标的其他可能性或命令是什么(包括 Win32api)。

【问题讨论】:

标签: python windows python-3.x winapi pywin32


【解决方案1】:

您可以简单地使用rotate-screen 库来进行屏幕旋转。 (目前仅支持 Windows)

import rotatescreen
screen = rotatescreen.get_primary_display()
screen.rotate_to(90) # rotate to 90 degrees

【讨论】:

    【解决方案2】:

    您可以使用下面的代码进行任意角度的屏幕旋转,我更改了上面 Mxl 给出的代码。

    import win32api as win32
    import win32con
    import sys
    import re
    x = 0
    args=sys.argv[1].lower()
    rotation_val=0
    m = re.search("(?<=^-rotate=)\S+", args)    # Use non-white character wildcard instead of d decimal
    if (m != None):
        print m.group(0)
        if ((m.group(0) == "180")):
            rotation_val=win32con.DMDO_180
        elif((m.group(0) == "90")):
            rotation_val=win32con.DMDO_270
        elif ((m.group(0) == "270")):   
            rotation_val=win32con.DMDO_90
        else:
            rotation_val=win32con.DMDO_DEFAULT
    
    device = win32.EnumDisplayDevices(None,x)
    dm = win32.EnumDisplaySettings(device.DeviceName,win32con.ENUM_CURRENT_SETTINGS)
    if((dm.DisplayOrientation + rotation_val)%2==1):
        dm.PelsWidth, dm.PelsHeight = dm.PelsHeight, dm.PelsWidth   
    dm.DisplayOrientation = rotation_val
    
    win32.ChangeDisplaySettingsEx(device.DeviceName,dm)
    

    要运行此脚本,您需要提供以下命令:-

    filename.py -rotate=180
    filename.py -rotate=0
    filename.py -rotate=90
    filename.py -rotate=270
    

    【讨论】:

      【解决方案3】:

      如果您在 Windows 中启用了旋转快捷键(CTRL+ALT+箭头键),您可以使用 pyautogui.hotkey 功能。

      【讨论】:

        【解决方案4】:

        这是(经过轻微修改的版本)从上面由 lbenini 提供的答案中为我工作的代码。可能的屏幕旋转值为win32con.DMDO_DEFAULT (0°)、win32con.DMDO_90win32con.DMDO_180win32con.DMDO_270(可以通过键入help(win32con) 获得列表)

        import win32api as win32
        import win32con
        
        def printAllScreen():
            i = 0
            while True:
                try:
                    device = win32.EnumDisplayDevices(None,i);
                    print("[%d] %s (%s)"%(i,device.DeviceString,device.DeviceName));
                    i = i+1;
                except:
                    break;
            return i
        
        screen_count=printAllScreen()
        x = int(input("\nEnter a display number [0-%d]: "%screen_count))
        
        
        device = win32.EnumDisplayDevices(None,x);
        print("Rotate device %s (%s)"%(device.DeviceString,device.DeviceName));
        
        dm = win32.EnumDisplaySettings(device.DeviceName,win32con.ENUM_CURRENT_SETTINGS)
        dm.DisplayOrientation = win32con.DMDO_180
        dm.PelsWidth, dm.PelsHeight = dm.PelsHeight, dm.PelsWidth
        dm.Fields = dm.Fields & win32con.DM_DISPLAYORIENTATION
        win32.ChangeDisplaySettingsEx(device.DeviceName,dm)
        

        【讨论】:

          猜你喜欢
          • 2011-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-19
          • 1970-01-01
          相关资源
          最近更新 更多