Public/Display/Display.ps1

<#
.SYNOPSIS
Returns [System.Windows.Forms.Screen]::AllScreens
 
.DESCRIPTION
Returns [System.Windows.Forms.Screen]::AllScreens
 
.LINK
https://osd.osdeploy.com/module/functions/display/get-displayallscreens
 
.NOTES
21.2.1 Initial Release
#>

function Get-DisplayAllScreens {
    [CmdletBinding()]
    param ()
  
    Add-Type -Assembly System.Windows.Forms
    Return ([System.Windows.Forms.Screen]::AllScreens | Select-Object * | Sort-Object DeviceName)
}
<#
.SYNOPSIS
Calulates the Bitmap Screen Size (PrimaryMonitorSize x ScreenScaling)
 
.DESCRIPTION
Calulates the Bitmap Screen Size (PrimaryMonitorSize x ScreenScaling)
 
.LINK
https://osd.osdeploy.com/module/functions/display/get-displayprimarybitmapsize
 
.NOTES
21.2.1 Initial Release
#>

function Get-DisplayPrimaryBitmapSize {
    [CmdletBinding()]
    param ()
  
    $GetDisplayPrimaryMonitorSize = Get-DisplayPrimaryMonitorSize
    $GetDisplayPrimaryScaling = Get-DisplayPrimaryScaling

    foreach ($Item in $GetDisplayPrimaryMonitorSize) {
        [int32]$Item.Width = [math]::round($(($Item.Width * $GetDisplayPrimaryScaling) / 100), 0)
        [int32]$Item.Height = [math]::round($(($Item.Height * $GetDisplayPrimaryScaling) / 100), 0)
    }

    Return $GetDisplayPrimaryMonitorSize
}
<#
.SYNOPSIS
Returns [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize
 
.DESCRIPTION
Returns [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize
 
.LINK
https://osd.osdeploy.com/module/functions/display/get-displayprimarymonitorsize
 
.NOTES
21.2.1 Initial Release
#>

function Get-DisplayPrimaryMonitorSize {
    [CmdletBinding()]
    param ()
  
    Add-Type -Assembly System.Windows.Forms
    Return ([System.Windows.Forms.SystemInformation]::PrimaryMonitorSize | Select-Object Width, Height)
}
<#
.SYNOPSIS
Returns the Primary Screen Scaling in Percent
 
.DESCRIPTION
Returns the Primary Screen Scaling in Percent
 
.LINK
https://osd.osdeploy.com/module/functions/display/get-displayPrimaryScaling
 
.NOTES
21.2.1 Initial Release
#>

function Get-DisplayPrimaryScaling {
    [CmdletBinding()]
    param ()
  
    #Add-Type -Assembly System.Drawing
      # Get DPI Scaling
      #[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
  
    Add-Type @'
using System;
using System.Runtime.InteropServices;
using System.Drawing;
 
public class DPI {
[DllImport("gdi32.dll")]
static extern int GetDeviceCaps(IntPtr hdc, int nIndex);
 
public enum DeviceCap {
VERTRES = 10,
DESKTOPVERTRES = 117
}
 
public static float scaling() {
Graphics g = Graphics.FromHwnd(IntPtr.Zero);
IntPtr desktop = g.GetHdc();
int LogicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.VERTRES);
int PhysicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.DESKTOPVERTRES);
 
return (float)PhysicalScreenHeight / (float)LogicalScreenHeight;
}
}
'@
 -ReferencedAssemblies 'System.Drawing.dll' -ErrorAction Stop
    Return [DPI]::scaling() * 100
}
<#
.SYNOPSIS
Returns [System.Windows.Forms.SystemInformation]::VirtualScreen which is a combination of all screens and placement
 
.DESCRIPTION
Returns [System.Windows.Forms.SystemInformation]::VirtualScreen which is a combination of all screens and placement
 
.LINK
https://osd.osdeploy.com/module/functions/display/get-displayvirtualscreen
 
.NOTES
21.2.1 Initial Release
#>

function Get-DisplayVirtualScreen {
    [CmdletBinding()]
    param ()
  
    Add-Type -Assembly System.Windows.Forms
    Return ([System.Windows.Forms.SystemInformation]::VirtualScreen | Select-Object Width, Height, X, Y, Left, Top, Right, Bottom, Size)
}