[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] 如何使用批处理实现桌面显示画面翻转

如何使用批处理实现桌面显示画面翻转

回复 1# Vossen


方法1:
以下代码保存为 test.bat
第一次执行,旋转90度。
第二次执行,恢复。
  1. # & cls & @cd /d "%~dp0" & powershell -c "Get-Content '%~0' | Out-String | Invoke-Expression " & exit /b
  2. Function Set-ScreenResolutionAndOrientation {
  3. <#
  4.     .Synopsis
  5.         Sets the Screen Resolution of the primary monitor
  6.     .Description
  7.         Uses Pinvoke and ChangeDisplaySettings Win32API to make the change
  8.     .Example
  9.         Set-ScreenResolutionAndOrientation         
  10.         
  11.     URL: http://stackoverflow.com/questions/12644786/powershell-script-to-change-screen-orientation?answertab=active#tab-top
  12.     CMD: powershell.exe -ExecutionPolicy Bypass -File "%~dp0ChangeOrientation.ps1"
  13. #>
  14. $pinvokeCode = @"
  15. using System;
  16. using System.Runtime.InteropServices;
  17. namespace Resolution
  18. {
  19.     [StructLayout(LayoutKind.Sequential)]
  20.     public struct DEVMODE
  21.     {
  22.        [MarshalAs(UnmanagedType.ByValTStr,SizeConst=32)]
  23.        public string dmDeviceName;
  24.        public short  dmSpecVersion;
  25.        public short  dmDriverVersion;
  26.        public short  dmSize;
  27.        public short  dmDriverExtra;
  28.        public int    dmFields;
  29.        public int    dmPositionX;
  30.        public int    dmPositionY;
  31.        public int    dmDisplayOrientation;
  32.        public int    dmDisplayFixedOutput;
  33.        public short  dmColor;
  34.        public short  dmDuplex;
  35.        public short  dmYResolution;
  36.        public short  dmTTOption;
  37.        public short  dmCollate;
  38.        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
  39.        public string dmFormName;
  40.        public short  dmLogPixels;
  41.        public short  dmBitsPerPel;
  42.        public int    dmPelsWidth;
  43.        public int    dmPelsHeight;
  44.        public int    dmDisplayFlags;
  45.        public int    dmDisplayFrequency;
  46.        public int    dmICMMethod;
  47.        public int    dmICMIntent;
  48.        public int    dmMediaType;
  49.        public int    dmDitherType;
  50.        public int    dmReserved1;
  51.        public int    dmReserved2;
  52.        public int    dmPanningWidth;
  53.        public int    dmPanningHeight;
  54.     };
  55.     class NativeMethods
  56.     {
  57.         [DllImport("user32.dll")]
  58.         public static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE devMode);
  59.         [DllImport("user32.dll")]
  60.         public static extern int ChangeDisplaySettings(ref DEVMODE devMode, int flags);
  61.         public const int ENUM_CURRENT_SETTINGS = -1;
  62.         public const int CDS_UPDATEREGISTRY = 0x01;
  63.         public const int CDS_TEST = 0x02;
  64.         public const int DISP_CHANGE_SUCCESSFUL = 0;
  65.         public const int DISP_CHANGE_RESTART = 1;
  66.         public const int DISP_CHANGE_FAILED = -1;
  67.         public const int DMDO_DEFAULT = 0;
  68.         public const int DMDO_90 = 1;
  69.         public const int DMDO_180 = 2;
  70.         public const int DMDO_270 = 3;
  71.     }
  72.     public class PrmaryScreenResolution
  73.     {
  74.         static public string ChangeResolution()
  75.         {
  76.             DEVMODE dm = GetDevMode();
  77.             if (0 != NativeMethods.EnumDisplaySettings(null, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm))
  78.             {
  79.                 // swap width and height
  80.                 int temp = dm.dmPelsHeight;
  81.                 dm.dmPelsHeight = dm.dmPelsWidth;
  82.                 dm.dmPelsWidth = temp;
  83.                 // determine new orientation based on the current orientation
  84.                 switch(dm.dmDisplayOrientation)
  85.                 {
  86.                     case NativeMethods.DMDO_DEFAULT:
  87.                         //dm.dmDisplayOrientation = NativeMethods.DMDO_270;
  88.                         //2016-10-25/EBP wrap counter clockwise
  89.                         dm.dmDisplayOrientation = NativeMethods.DMDO_90;
  90.                         break;
  91.                     case NativeMethods.DMDO_270:
  92.                         dm.dmDisplayOrientation = NativeMethods.DMDO_180;
  93.                         break;
  94.                     case NativeMethods.DMDO_180:
  95.                         dm.dmDisplayOrientation = NativeMethods.DMDO_90;
  96.                         break;
  97.                     case NativeMethods.DMDO_90:
  98.                         dm.dmDisplayOrientation = NativeMethods.DMDO_DEFAULT;
  99.                         break;
  100.                     default:
  101.                         // unknown orientation value
  102.                         // add exception handling here
  103.                         break;
  104.                 }
  105.                 int iRet = NativeMethods.ChangeDisplaySettings(ref dm, NativeMethods.CDS_TEST);
  106.                 if (iRet == NativeMethods.DISP_CHANGE_FAILED)
  107.                 {
  108.                     return "Unable To Process Your Request. Sorry For This Inconvenience.";
  109.                 }
  110.                 else
  111.                 {
  112.                     iRet = NativeMethods.ChangeDisplaySettings(ref dm, NativeMethods.CDS_UPDATEREGISTRY);
  113.                     switch (iRet)
  114.                     {
  115.                         case NativeMethods.DISP_CHANGE_SUCCESSFUL:
  116.                             {
  117.                                 return "Success";
  118.                             }
  119.                         case NativeMethods.DISP_CHANGE_RESTART:
  120.                             {
  121.                                 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.";
  122.                             }
  123.                         default:
  124.                             {
  125.                                 return "Failed To Change The Resolution";
  126.                             }
  127.                     }
  128.                 }
  129.             }
  130.             else
  131.             {
  132.                 return "Failed To Change The Resolution.";
  133.             }
  134.         }
  135.         private static DEVMODE GetDevMode()
  136.         {
  137.             DEVMODE dm = new DEVMODE();
  138.             dm.dmDeviceName = new String(new char[32]);
  139.             dm.dmFormName = new String(new char[32]);
  140.             dm.dmSize = (short)Marshal.SizeOf(dm);
  141.             return dm;
  142.         }
  143.     }
  144. }
  145. "@
  146. Add-Type $pinvokeCode -ErrorAction SilentlyContinue
  147. [Resolution.PrmaryScreenResolution]::ChangeResolution()
  148. }
  149. Set-ScreenResolutionAndOrientation
复制代码
参考:https://github.com/Clicketyclick/ChangeScreenOrientation/
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 1# Vossen


方法2:
下载命令行工具Display
http://noeld.com/programs.asp#Display
解压缩之后把display64.exe和下面的bat脚本放在同一个目录下

1-旋转90度.bat
  1. @echo off
  2. cd /d "%~dp0"
  3. display64.exe /rotate:90
复制代码
2-旋转180度.bat
  1. @echo off
  2. cd /d "%~dp0"
  3. display64.exe /rotate:180
复制代码
3-旋转270度.bat
  1. @echo off
  2. cd /d "%~dp0"
  3. display64.exe /rotate:270
复制代码
4-恢复.bat
  1. @echo off
  2. cd /d "%~dp0"
  3. display64.exe /rotate:0
复制代码
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表