本文目录导读:

- Windows系统(PowerShell脚本)
- macOS系统(AppleScript/Shell)
- Linux系统(xrandr命令)
- Android系统(ADB命令)
- Python跨平台脚本
- 图形界面工具集成
- 注意事项
我来介绍几种控制屏幕方向的方法,根据不同平台和需求选择:
Windows系统(PowerShell脚本)
使用系统API直接旋转
# 屏幕旋转脚本
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class ScreenRotation {
[DllImport("user32.dll")]
public static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE devMode);
[DllImport("user32.dll")]
public static extern int ChangeDisplaySettings(ref DEVMODE devMode, int flags);
[StructLayout(LayoutKind.Sequential)]
public struct DEVMODE {
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string dmDeviceName;
public short dmSpecVersion;
public short dmDriverVersion;
public short dmSize;
public short dmDriverExtra;
public int dmFields;
public int dmPositionX;
public int dmPositionY;
public int dmDisplayOrientation;
public int dmDisplayFixedOutput;
public short dmColor;
public short dmDuplex;
public short dmYResolution;
public short dmTTOption;
public short dmCollate;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string dmFormName;
public short dmLogPixels;
public int dmBitsPerPel;
public int dmPelsWidth;
public int dmPelsHeight;
public int dmDisplayFlags;
public int dmDisplayFrequency;
public int dmICMMethod;
public int dmICMIntent;
public int dmMediaType;
public int dmDitherType;
public int dmReserved1;
public int dmReserved2;
public int dmPanningWidth;
public int dmPanningHeight;
}
}
"@
# 设置旋转角度 (0=0°, 1=90°, 2=180°, 3=270°)
$rotationAngle = 1
$devMode = New-Object ScreenRotation+DEVMODE
$devMode.dmSize = [System.Runtime.InteropServices.Marshal]::SizeOf($devMode)
$devMode.dmDisplayOrientation = $rotationAngle
$devMode.dmFields = 0x00000080 # DM_DISPLAYORIENTATION
# 应用设置
[ScreenRotation]::ChangeDisplaySettings([ref]$devMode, 0) | Out-Null
Write-Host "屏幕已旋转 $($rotationAngle * 90) 度"
使用第三方工具(nircmd)
# 使用 NirCmd(需要先下载) # 下载地址: https://www.nirsoft.net/utils/nircmd.html # 旋转到0度 .\nircmd.exe setdisplay rotate 0 # 旋转到90度 .\nircmd.exe setdisplay rotate 90 # 旋转到180度 .\nircmd.exe setdisplay rotate 180 # 旋转到270度 .\nircmd.exe setdisplay rotate 270
macOS系统(AppleScript/Shell)
使用AppleScript
-- 屏幕旋转脚本
tell application "System Events"
-- 获取所有显示器
set displays to every display
end tell
-- 旋转屏幕(需要辅助功能权限)
do shell script "osascript -e 'tell application \"System Events\" to key code 24 using {control down, command down}'"
使用核心图形命令
#!/bin/bash # macOS屏幕旋转 # 获取当前分辨率 displayplacer list # 旋转屏幕到指定方向 displayplacer "id:primary resolution:1920x1080 hz:60 orientation:90"
Linux系统(xrandr命令)
使用xrandr命令
#!/bin/bash # 屏幕旋转脚本 # 查看当前显示设置 xrandr # 旋转到正常(0°) xrandr --output HDMI-1 --rotate normal # 旋转到90° xrandr --output HDMI-1 --rotate left # 旋转到180° xrandr --output HDMI-1 --rotate inverted # 旋转到270° xrandr --output HDMI-1 --rotate right
Android系统(ADB命令)
使用ADB命令
#!/bin/bash # Android屏幕旋转 # 强制横屏 adb shell settings put system accelerometer_rotation 0 adb shell settings put system user_rotation 1 # 强制竖屏 adb shell settings put system accelerometer_rotation 0 adb shell settings put system user_rotation 0 # 恢复自动旋转 adb shell settings put system accelerometer_rotation 1
Python跨平台脚本
#!/usr/bin/env python3
# 跨平台屏幕旋转控制
import platform
import subprocess
import os
def rotate_screen(angle):
"""旋转屏幕到指定角度"""
system = platform.system()
if system == "Windows":
# Windows使用PowerShell
ps_script = f"""
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class Rotation {{
[DllImport("user32.dll")]
public static extern int ChangeDisplaySettings(ref DEVMODE devMode, int flags);
}}
"@
"""
# 简化版本,实际需要完整结构
subprocess.run(["powershell", "-Command", f"nircmd.exe setdisplay rotate {angle}"])
elif system == "Darwin": # macOS
# macOS使用AppleScript
subprocess.run(["osascript", "-e", f"tell application \"System Events\" to key code {angle}"])
elif system == "Linux":
# Linux使用xrandr
display = subprocess.check_output(["xrandr"]).decode()
# 解析当前显示器
output_name = [line.split()[0] for line in display.split('\n') if ' connected' in line][0]
rotations = {
0: "normal",
90: "left",
180: "inverted",
270: "right"
}
subprocess.run(["xrandr", "--output", output_name, "--rotate", rotations.get(angle, "normal")])
# 使用示例
if __name__ == "__main__":
rotate_screen(90) # 旋转90度
图形界面工具集成
# 使用tkinter创建简单的屏幕旋转控制界面
import tkinter as tk
import subprocess
class ScreenRotator:
def __init__(self, root):
self.root = root
self.root.title("屏幕旋转控制")
self.root.geometry("300x200")
# 创建按钮
tk.Button(root, text="旋转0°", command=lambda: self.rotate(0)).pack(pady=5)
tk.Button(root, text="旋转90°", command=lambda: self.rotate(90)).pack(pady=5)
tk.Button(root, text="旋转180°", command=lambda: self.rotate(180)).pack(pady=5)
tk.Button(root, text="旋转270°", command=lambda: self.rotate(270)).pack(pady=5)
def rotate(self, angle):
if os.name == 'nt': # Windows
subprocess.run(["nircmd.exe", "setdisplay", "rotate", str(angle)])
else: # Linux/Mac
# 添加对应的系统命令
pass
root = tk.Tk()
app = ScreenRotator(root)
root.mainloop()
注意事项
-
权限问题:
- Windows脚本需要管理员权限
- macOS需要辅助功能权限
- Linux可能需要特定权限
-
硬件支持:
- 部分显示器不支持旋转
- 可能需要安装显卡驱动
-
安全提示:
- 旋转前保存当前设置
- 设置恢复机制(如定时恢复)
选择适合你系统的脚本即可,需要我详细说明某个特定平台的实现吗?