summaryrefslogtreecommitdiffstats
path: root/gfx/wr/ci-scripts/set-screenresolution.ps1
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/wr/ci-scripts/set-screenresolution.ps1')
-rw-r--r--gfx/wr/ci-scripts/set-screenresolution.ps1124
1 files changed, 124 insertions, 0 deletions
diff --git a/gfx/wr/ci-scripts/set-screenresolution.ps1 b/gfx/wr/ci-scripts/set-screenresolution.ps1
new file mode 100644
index 0000000000..2f58443417
--- /dev/null
+++ b/gfx/wr/ci-scripts/set-screenresolution.ps1
@@ -0,0 +1,124 @@
+# http://blogs.technet.com/b/heyscriptingguy/archive/2010/07/07/hey-scripting-guy-how-can-i-change-my-desktop-monitor-resolution-via-windows-powershell.aspx
+
+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)
+}