Public/Display/Display.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<#
.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)
}