【发布时间】:2017-06-19 19:44:55
【问题描述】:
我正在尝试编写一个 python 脚本来在 Windows 中旋转屏幕。
我有使用 Win32api 的线索。
实现这一目标的其他可能性或命令是什么(包括 Win32api)。
【问题讨论】:
标签: python windows python-3.x winapi pywin32
我正在尝试编写一个 python 脚本来在 Windows 中旋转屏幕。
我有使用 Win32api 的线索。
实现这一目标的其他可能性或命令是什么(包括 Win32api)。
【问题讨论】:
标签: python windows python-3.x winapi pywin32
您可以简单地使用rotate-screen 库来进行屏幕旋转。 (目前仅支持 Windows)
import rotatescreen
screen = rotatescreen.get_primary_display()
screen.rotate_to(90) # rotate to 90 degrees
【讨论】:
您可以使用下面的代码进行任意角度的屏幕旋转,我更改了上面 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
【讨论】:
如果您在 Windows 中启用了旋转快捷键(CTRL+ALT+箭头键),您可以使用 pyautogui.hotkey 功能。
【讨论】:
这是(经过轻微修改的版本)从上面由 lbenini 提供的答案中为我工作的代码。可能的屏幕旋转值为win32con.DMDO_DEFAULT (0°)、win32con.DMDO_90、win32con.DMDO_180 和win32con.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)
【讨论】: