首页 > 解决方案 > 旋转屏幕 Powershell

问题描述

有人知道如何旋转屏幕的powershell代码吗?我已经使用了 $width 和 $height 参数,但还有旋转参数吗?

我已经在以下网站上搜索过:

我已经在使用此代码:

Function Set-ScreenResolution { 
param ( 
[Parameter(Mandatory=$true, 
  Position = 0)] 
[int] 
$Width, 
[Parameter(Mandatory=$true, 
  Position = 1)] 
[int] 
$Height
) 
$pinvokeCode = @" 
using System; 
using System.Runtime.InteropServices; 
namespace Resolution 
{ 
  [StructLayout(LayoutKind.Sequential)] 
  public struct DEVMODE1 
  { 
  [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] 
  public string dmDeviceName; 
  public short dmSpecVersion; 
  public short dmDriverVersion; 
  public short dmSize; 
  public short dmDriverExtra; 
  public int dmFields; 
  public short dmOrientation; 
  public short dmPaperSize; 
  public short dmPaperLength; 
  public short dmPaperWidth; 
  public short dmScale; 
  public short dmCopies; 
  public short dmDefaultSource; 
  public short dmPrintQuality; 
  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 short 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; 
  }; 
  class User_32 
  { 
  [DllImport("user32.dll")] 
  public static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE1 devMode); 
  [DllImport("user32.dll")] 
  public static extern int ChangeDisplaySettings(ref DEVMODE1 devMode, int flags); 
  public const int ENUM_CURRENT_SETTINGS = -1; 
  public const int CDS_UPDATEREGISTRY = 0x01; 
  public const int CDS_TEST = 0x02; 
  public const int DISP_CHANGE_SUCCESSFUL = 0; 
  public const int DISP_CHANGE_RESTART = 1; 
  public const int DISP_CHANGE_FAILED = -1; 
  } 
  public class PrmaryScreenResolution 
  { 
  static public string ChangeResolution(int width, int height) 
  { 
  DEVMODE1 dm = GetDevMode1(); 
  if (0 != User_32.EnumDisplaySettings(null, User_32.ENUM_CURRENT_SETTINGS, ref dm)) 
  { 
  dm.dmPelsWidth = width; 
  dm.dmPelsHeight = height; 
  int iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_TEST); 
  if (iRet == User_32.DISP_CHANGE_FAILED) 
  { 
  return "Unable To Process Your Request. Sorry For This Inconvenience."; 
  } 
  else 
  { 
  iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_UPDATEREGISTRY); 
  switch (iRet) 
  { 
  case User_32.DISP_CHANGE_SUCCESSFUL: 
  { 
  return "Success"; 
  } 
  case User_32.DISP_CHANGE_RESTART: 
  { 
  return "You Need To Reboot For The Change To Happen.\n If You Feel Any Problem After Rebooting Your Machine\nThen Try To Change Resolution In Safe Mode."; 
  } 
  default: 
  { 
  return "Failed To Change The Resolution"; 
  } 
  } 
  } 
  } 
  else 
  { 
  return "Failed To Change The Resolution."; 
  } 
  } 
  private static DEVMODE1 GetDevMode1() 
  { 
  DEVMODE1 dm = new DEVMODE1(); 
  dm.dmDeviceName = new String(new char[32]); 
  dm.dmFormName = new String(new char[32]); 
  dm.dmSize = (short)Marshal.SizeOf(dm); 
  return dm; 
  } 
  } 
} 
"@ 
Add-Type $pinvokeCode -ErrorAction SilentlyContinue 
[Resolution.PrmaryScreenResolution]::ChangeResolution($width,$height) 
}
Set-ScreenResolution 1920 1080

谢谢,

标签: powershellrotation

解决方案


看起来这可以通过Win32APIC/C++库)实现。通过一些内联 C# 编译,您可以从 PowershellP/Invoke进入Win32API,就像从其他 .NET 语言中一样。

我在上面链接到一个 Github 脚本,我发现它使用上述Win32API 从 Powershell 更改屏幕方向。如果您想了解更多关于P/Invoke它的信息,这里是有关该主题的官方 Microsoft 文档


推荐阅读