2017-12-05 27 views
2

HEJ,화면 변경 PowerShell을 사용한 방향 - 레지스트리 값은 어디에 저장되어 있습니까? 스웨덴

나는 참조 게시물에서 코드를 시도하고있다 : Powershell script to change screen Orientation

스크립트가 작동합니다. 목표는 회전이 가로 또는 세로 90도 시계 방향인지 확인하는 것입니다.

2 개의 값만 허용하도록 현재 코드를 변경하거나 스크립트가 한 번만 실행되도록해야합니다.

어느 쪽이든 나는 CDS_UPDATEREGISTRY에 대한 레지스트리 키가 저장되는 위치를 알아야합니다. 레지스트리에서 각 순환에 대한 값 변경이 레지스트리에 저장되는 위치를 파악할 수는 없지만?

누구나 값이 저장되는 위치를 알고있는 사람이 있습니까?

번호 : ChangeResolution 매개 변수로 값은 0, 1, 2, 3을 첨가하여

Function Set-ScreenResolutionAndOrientation { 

<# 
    .Synopsis 
     Sets the Screen Resolution of the primary monitor 
    .Description 
     Uses Pinvoke and ChangeDisplaySettings Win32API to make the change 
    .Example 
     Set-ScreenResolutionAndOrientation   
#> 

$pinvokeCode = @" 

using System; 
using System.Runtime.InteropServices; 

namespace Resolution 
{ 

    [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 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 NativeMethods 
    { 
     [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); 

     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 const int DMDO_DEFAULT = 0; 
     public const int DMDO_90 = 1; 
     public const int DMDO_180 = 2; 
     public const int DMDO_270 = 3; 
    } 



    public class PrmaryScreenResolution 
    { 
     static public string ChangeResolution() 
     { 

      DEVMODE dm = GetDevMode(); 

      if (0 != NativeMethods.EnumDisplaySettings(null, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm)) 
      { 

       // swap width and height 
       int temp = dm.dmPelsHeight; 
       dm.dmPelsHeight = dm.dmPelsWidth; 
       dm.dmPelsWidth = temp; 

       // determine new orientation based on the current orientation 
       switch(dm.dmDisplayOrientation) 
       { 
        case NativeMethods.DMDO_DEFAULT: 
         dm.dmDisplayOrientation = NativeMethods.DMDO_270; 
         break; 
        case NativeMethods.DMDO_270: 
         dm.dmDisplayOrientation = NativeMethods.DMDO_180; 
         break; 
        case NativeMethods.DMDO_180: 
         dm.dmDisplayOrientation = NativeMethods.DMDO_90; 
         break; 
        case NativeMethods.DMDO_90: 
         dm.dmDisplayOrientation = NativeMethods.DMDO_DEFAULT; 
         break; 
        default: 
         // unknown orientation value 
         // add exception handling here 
         break; 
       } 


       int iRet = NativeMethods.ChangeDisplaySettings(ref dm, NativeMethods.CDS_TEST); 

       if (iRet == NativeMethods.DISP_CHANGE_FAILED) 
       { 
        return "Unable To Process Your Request. Sorry For This Inconvenience."; 
       } 
       else 
       { 
        iRet = NativeMethods.ChangeDisplaySettings(ref dm, NativeMethods.CDS_UPDATEREGISTRY); 
        switch (iRet) 
        { 
         case NativeMethods.DISP_CHANGE_SUCCESSFUL: 
          { 
           return "Success"; 
          } 
         case NativeMethods.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 DEVMODE GetDevMode() 
     { 
      DEVMODE dm = new DEVMODE(); 
      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() 
} 

Set-ScreenResolutionAndOrientation 

답변

0
<# 
    0 = Default 
    1 = 90°Left (Counter-Clockwise) 
    2 = 180° 
    3 = 270° (90°Right Clockwise) 
#> 

(0) 함수는 세로 정의 스크립트있게하거나 가로 방향.