function Show-MyMsgBoxTrnspBG(){
<#
.SYNOPSIS
Shows a customizable Message Box.
.DESCRIPTION
A customizable Message Box.
Window title is specified using the 'MsgBoxTitle' parameter.
A title is shown above the Message body, this can be customized using the
'MsgTypeDescription' parameter, if left out this will default to window title.
Message body can be either a textstring or a Xaml string (flowdocument).
Font size can be specified.
If used with a textstring for message body, this can be shown with fixed font.
Several types can be chosen for the message box, these will default to either
a Single 'OK' button or 'YES'/'NO' buttons. If a type defaults to OK this can be
overridden by using the 'ShowYesNo' switch.
A Info button that opens a link to a blogg post about the Message Box is shown by
default, this can be Hidden by using the 'HideInfoButton' switch
.PARAMETER MsgBoxTitle
Specifies the window title.
.PARAMETER MsgTypeDescription
Specifies the inbox message title row.
.PARAMETER MsgBoxBody
Specifies the message body content, either a textstring or a Xaml document string.
.PARAMETER XamlSource
Switch that if used expects the MsgBoxBody parameter to be a Xaml document string.
.PARAMETER MsgBoxType
Specifies the message box type, either 'Information','Question','Warning' or 'Error'. If left out defaults to 'Information'
.PARAMETER FontSize
Specifies the font size, defaults to '12'.
.PARAMETER FixedFont
Switch that specifies if message should be displayed with fixed fount (Courier New).
.PARAMETER DoubleWidth
Switch that if used will double the width of the Messagebox.
.PARAMETER ShowYesNo
Switch that if used overrides the default button configuration for given MsgBoxType.
.PARAMETER HideInfoButton
Switch that if used hides to Info button.
.PARAMETER UseSystemColors
If used the message box color wont be adjusted depending of MsgBoxType
.INPUTS
None. You can't pipe objects to Add-Extension.
.OUTPUTS
System.String. Returns Yes, No or Ok.
.EXAMPLE
PS> Show-MyMsgBox -MsgBoxTitle 'My message box windows title' -MsgBoxBody 'Hello world' -MsgBoxType 'Information' -MsgTypeDescription 'This is a title row' -FontSize '14'
Will return 'OK' if OK button is clicked or the key 'o' is selected.
.LINK
Blogg post with information: https://myraspberry.sandblom.it/2024/05/04/custom-message-box-with-xaml-gui/
#>
#[CmdletBinding()]
param (
[Parameter(Mandatory)]
[string] $MsgBoxTitle,
[Parameter(Mandatory)]
[string] $MsgBoxBody,
[Parameter(Mandatory=$false)]
[string] $MsgBoxType='Information',
[Parameter(Mandatory=$false)]
[string] $MsgTypeDescription,
[Parameter(Mandatory=$false)]
[string] $FontSize,
[Parameter(Mandatory=$false)]
[Switch] $FixedFont,
[Parameter(Mandatory=$false)]
[Switch] $DoubleWidth,
[Parameter(Mandatory=$false)]
[Switch] $HalfWidth,
[Parameter(Mandatory=$false)]
[double] $FormWidth,
[Parameter(Mandatory=$false)]
[double] $FormHeight,
[Parameter(Mandatory=$false)]
[double] $OffsetLeft= -1,
[Parameter(Mandatory=$false)]
[double] $OffsetRight= -1,
[Parameter(Mandatory=$false)]
[double] $OffsetTop= -1,
[Parameter(Mandatory=$false)]
[double] $OffsetBottom= -1,
[Parameter(Mandatory=$false)]
[Switch] $XamlSource,
#[Parameter(Mandatory=$false)]
#[Switch] $HTMLSource,
[Parameter(Mandatory=$false)]
[Switch] $HideInfoButton,
[Parameter(Mandatory=$false)]
[Switch] $ShowYesNo,
[Parameter(Mandatory=$false)]
[Switch] $UseBlueCircleIcons,
[Parameter(Mandatory=$false)]
[Switch] $UsePlainCircleIcons,
[Parameter(Mandatory=$false)]
[Switch] $UseSystemColors,
[Parameter(Mandatory=$false)]
[string] $BGImage,
[Parameter(Mandatory=$false)]
[string] $BGImageOpacity,
[Parameter(Mandatory=$false)]
[Switch] $UseBGImageDimensions,
[Parameter(Mandatory=$false)]
[string] $BGOpacity,
[Parameter(Mandatory=$false)]
[string] $MSGOpacity,
[Parameter(Mandatory=$false)]
[string] $TopBtmOpacity,
[Parameter(Mandatory=$false)]
[Switch] $ActivateConfigArea,
[Parameter(Mandatory=$false)]
[hashtable] $KeywordReplace
)#>
# Load presentation framework assembly
Add-Type -AssemblyName PresentationFramework
Add-Type -AssemblyName PresentationCore
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName Microsoft.VisualBasic
Add-Type -AssemblyName WindowsBase
# Create the XAML reader using a here-string
$xaml = [xml] @'
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" AllowsTransparency="True" WindowStyle="None" Background="#FFFFFFFF" Height="400" Width="700" ResizeMode="NoResize">
<Grid x:Name="Main_Grd" Background="#00000000" >
<Grid x:Name="Top_Grid" Height="30" VerticalAlignment="Top" Background="#FF000000" >
<Image x:Name="WinIcon_Img" HorizontalAlignment="Left" Height="26" VerticalAlignment="Top" Width="26" Margin="2,2,2,2"/>
<Label x:Name="WinTitle_Lbl" Margin="30,2,88,2" Content="Windows title goes here" Padding="4,2,4,2" VerticalContentAlignment="Center" FontSize="18"/>
<Button x:Name="WinMinimize_Btn" Content="Mn" HorizontalAlignment="Right" VerticalAlignment="Top" Height="26" Width="26" Margin="0,2,58,2" Background="#00DDDDDD" BorderBrush="{x:Null}"/>
<Button x:Name="WinMaximize_Btn" Content="Mx" HorizontalAlignment="Right" VerticalAlignment="Top" Height="26" Width="26" Margin="0,2,30,2" Background="#00DDDDDD" BorderBrush="{x:Null}"/>
<Button x:Name="WinClose_Btn" Content="C" HorizontalAlignment="Right" VerticalAlignment="Top" Height="26" Width="26" Margin="0,2,2,2" Background="#00DDDDDD" BorderBrush="{x:Null}"/>
</Grid>
<Grid x:Name="Body_Grd" Margin="0,30,0,4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10"/>
<ColumnDefinition/>
<ColumnDefinition Width="10"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="10"/>
<RowDefinition Height="40"/>
<RowDefinition/>
<RowDefinition Height="40"/>
<RowDefinition Height="10"/>
</Grid.RowDefinitions>
<Button x:Name="Ok_Btn" Grid.Column="1" Content="OK" HorizontalAlignment="Center" Margin="40,4,0,4" Grid.Row="3" Background="Transparent" BorderBrush="#7F707070" Padding="4,1,4,1" Width="50"/>
<Button x:Name="Yes_Btn" Grid.Column="1" Content="YES" HorizontalAlignment="Right" Margin="0,4,58,4" Grid.Row="3" Background="Transparent" BorderBrush="#7F707070" Padding="4,1,4,1" Width="50"/>
<Border x:Name="MsgBoxBodyBorder" BorderBrush="#3F000000" BorderThickness="1" Grid.Column="1" Grid.Row="2" Margin="40,0,0,0"/>
<RichTextBox x:Name="MsgBoxBody_Rtx" Grid.Column="1" Grid.Row="2" Padding="4,4,4,4" HorizontalScrollBarVisibility="Disabled" BorderBrush="{x:Null}" HorizontalAlignment="Center" Margin="44,4,4,4" IsReadOnly="True" VerticalContentAlignment="Stretch" Background="#FFFFFFFF">
<FlowDocument>
<Paragraph>
<Run Text="MessageBox body text"/>
</Paragraph>
</FlowDocument>
</RichTextBox>
<Grid x:Name="Webbrowser_Grd" Grid.Column="1" Grid.Row="2" Margin="44,4,4,4" Background="#FFFFFFFF" Visibility="Hidden">
<WebBrowser x:Name="WebBrowser_Wbrw" Opacity="1" OpacityMask="#FFFFFFFF"/>
</Grid>
<Button x:Name="No_Btn" Grid.Column="1" Content="NO" HorizontalAlignment="Right" Margin="0,4,4,4" Grid.Row="3" Background="Transparent" BorderBrush="#7F707070" Padding="4,1,4,1" Width="50"/>
<Label x:Name="MsgType_Lbl" Grid.Column="1" Content="Information/Question/Error" Grid.Row="1" Padding="4,0,4,0" VerticalAlignment="Center" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="18" FontFamily="Segoe UI Semibold" Margin="44,0,4,0"/>
<Image x:Name="MsgTypeImage_Img" Grid.Column="1" HorizontalAlignment="Left" Height="40" Grid.RowSpan="1" Grid.Row="1" Width="40" VerticalAlignment="Top" />
<Button x:Name="Info_Btn" Grid.Column="1" Content="Info" HorizontalAlignment="Left" Margin="44,4,0,4" Grid.Row="3" Background="Transparent" BorderBrush="#7F707070" Padding="4,1,4,1" Width="50" ToolTip="Click this button to open webpage describing the script"/>
<Button x:Name="CopyMsgToCP_Btn" Content="COPY MESSAGE" HorizontalAlignment="Right" Margin="0,0,4,4" Grid.Row="2" Grid.Column="1" VerticalAlignment="Bottom" Background="{x:Null}" FontFamily="Segoe UI Light" FontSize="7" BorderThickness="1" BorderBrush="#3F707070" Foreground="#BF000000" Padding="3,2,3,2"/>
<Image x:Name="MsgLogo_Img" Grid.Column="1" Grid.Row="3" VerticalAlignment="Stretch" Margin="0,0,0,0" HorizontalAlignment="Left" Width="38" Height="38" />
</Grid>
<Grid x:Name="Bottom_Grd" Height="4" VerticalAlignment="Bottom" Background="#FF000000">
<Grid.RowDefinitions>
<RowDefinition Height="10"/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition Height="10"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10"/>
<ColumnDefinition Width="1.15*"/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition Width="1.15*"/>
<ColumnDefinition Width="1.15*"/>
<ColumnDefinition/>
<ColumnDefinition Width="10"/>
</Grid.ColumnDefinitions>
<Slider x:Name="BtmGrdBGOpac_Sldr" Grid.Column="1" Grid.Row="2" VerticalAlignment="Center" Grid.ColumnSpan="2" Minimum="0" Maximum="100" TickFrequency="1" IsSnapToTickEnabled="True" TickPlacement="BottomRight" Foreground="Black" Margin="2,0,2,0"/>
<Slider x:Name="BtmGrdMsgOpac_Sldr" Grid.Column="3" Grid.Row="2" VerticalAlignment="Center" Grid.ColumnSpan="2" Minimum="0" Maximum="100" TickFrequency="1" IsSnapToTickEnabled="True" TickPlacement="BottomRight" Foreground="Black" Margin="2,0,2,0"/>
<Slider x:Name="BtmGrdTpBtmOpac_Sldr" Grid.Column="5" Grid.Row="2" VerticalAlignment="Center" Grid.ColumnSpan="2" Minimum="0" Maximum="100" TickFrequency="1" IsSnapToTickEnabled="True" TickPlacement="BottomRight" Foreground="Black" Margin="2,0,2,0"/>
<Button x:Name="BtmGrdClose_Btn" Grid.Row="0" Grid.Column="7" Content="✖" Background="#00DDDDDD" BorderBrush="Black" FontSize="6" Padding="0,0,0,0" HorizontalContentAlignment="Right" VerticalContentAlignment="Bottom" Opacity="0.5"/>
<Label x:Name="BtmGrdBGOpac_Lbl" Grid.Column="1" Content="Background Opacity" Grid.Row="1" Padding="0,0,0,0" FontSize="11" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="4,0,0,0" FontStyle="Italic" FontWeight="Bold" Grid.ColumnSpan="2"/>
<Label x:Name="BtmGrdMsgOpac_Lbl" Grid.Column="3" Content="Message Opacity" Grid.Row="1" Padding="0,0,0,0" FontSize="11" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="4,0,0,0" FontStyle="Italic" FontWeight="Bold" Grid.ColumnSpan="2"/>
<Label x:Name="BtmGrdTpBtmOpac_Lbl" Grid.Column="5" Content="Top and Bottom Opacity" Grid.Row="1" Padding="0,0,0,0" FontSize="11" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="4,0,0,0" FontStyle="Italic" FontWeight="Bold" Grid.ColumnSpan="2"/>
<TextBox x:Name="BtmGrdBGOpac_Tbx" Grid.Column="2" HorizontalAlignment="Right" Grid.Row="1" TextWrapping="Wrap" FontFamily="Courier New" FontSize="11" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" Margin="0,2,16,2" Background="#40FFFFFF" IsEnabled="False" Padding="0,2,0,1" BorderBrush="#64ABADB3" />
<Label x:Name="BtmGrdBGOpacTbxSfx_Lbl" Grid.Column="2" Content="%" Grid.Row="1" Padding="0,2,2,2" FontSize="10" VerticalAlignment="Center" HorizontalAlignment="Right" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Margin="0,0,4,0"/>
<TextBox x:Name="BtmGrdMsgOpac_Tbx" Grid.Column="4" HorizontalAlignment="Right" Grid.Row="1" TextWrapping="Wrap" FontFamily="Courier New" FontSize="11" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" Margin="0,2,16,2" Background="#40FFFFFF" IsEnabled="False" Padding="0,2,0,1" BorderBrush="#64ABADB3" />
<Label x:Name="BtmGrdMsgOpacTbxSfx_Lbl" Grid.Column="4" Content="%" Grid.Row="1" Padding="0,2,2,2" FontSize="10" VerticalAlignment="Center" HorizontalAlignment="Right" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Margin="0,0,4,0"/>
<TextBox x:Name="BtmGrdTpBtmOpac_Tbx" Grid.Column="6" HorizontalAlignment="Right" Grid.Row="1" TextWrapping="Wrap" FontFamily="Courier New" FontSize="11" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" Margin="0,2,16,2" Background="#40FFFFFF" IsEnabled="False" Padding="0,2,0,1" BorderBrush="#64ABADB3" />
<Label x:Name="BtmGrdTpBtmOpacTbxSfx_Lbl" Grid.Column="6" Content="%" Grid.Row="1" Padding="0,2,2,2" FontSize="10" VerticalAlignment="Center" HorizontalAlignment="Right" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Margin="0,0,4,0"/>
<Label x:Name="BtmGrdFntSz_Lbl" Grid.Column="1" Content="Font size" Grid.Row="3" Padding="0,0,0,0" FontSize="11" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="4,0,0,0" FontStyle="Italic" FontWeight="Bold"/>
<TextBox x:Name="BtmGrdFntSz_Tbx" Grid.Column="1" HorizontalAlignment="Right" Grid.Row="3" TextWrapping="Wrap" FontFamily="Courier New" FontSize="11" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" Margin="0,2,16,2" Background="#40FFFFFF" IsEnabled="False" Padding="0,2,0,1" BorderBrush="#64ABADB3" />
<Label x:Name="BtmGrdFntSzTbxSfx_Lbl" Grid.Column="1" Content="px" Grid.Row="3" Padding="0,2,2,2" FontSize="9" VerticalAlignment="Center" HorizontalAlignment="Right" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Margin="0,0,4,0"/>
<CheckBox x:Name="BtmGrdFixedFont_CkBx" Grid.Column="2" Content="FixedFont" HorizontalAlignment="Left" Grid.Row="3" VerticalAlignment="Center" Margin="2,0,5,0" FontSize="11" FontStyle="Italic" Padding="2,0,0,0" VerticalContentAlignment="Center" />
<CheckBox x:Name="BtmGrdDoubleWidth_CkBx" Grid.Column="3" Content="DoubleWidth" HorizontalAlignment="Left" Grid.Row="3" VerticalAlignment="Center" Margin="2,0,5,0" FontSize="11" FontStyle="Italic" Padding="2,0,0,0" VerticalContentAlignment="Center" />
<CheckBox x:Name="BtmGrdUseBlueCircleIcons_CkBx" Grid.Column="4" Content="UseBlueCircleIcons" HorizontalAlignment="Left" Grid.Row="3" VerticalAlignment="Center" Margin="2,0,0,0" FontSize="11" FontStyle="Italic" Padding="2,0,0,0" VerticalContentAlignment="Center" />
<CheckBox x:Name="BtmGrdUsePlainCircleIcons_CkBx" Grid.Column="5" Content="UsePlainCircleIcons" HorizontalAlignment="Left" Grid.Row="3" VerticalAlignment="Center" Margin="2,0,0,0" FontSize="11" FontStyle="Italic" Padding="2,0,0,0" VerticalContentAlignment="Center" />
<CheckBox x:Name="BtmGrdUseSystemColors_CkBx" Grid.Column="6" Content="UseSystemColors" HorizontalAlignment="Left" Grid.Row="3" VerticalAlignment="Center" FontSize="11" FontStyle="Italic" Padding="2,0,0,0" VerticalContentAlignment="Center" Margin="2,0,0,0" />
</Grid>
</Grid>
</Window>
'@
# <Slider x:Name="BtmGrdBGOpac_Sldr" Grid.Column="1" Grid.Row="2" VerticalAlignment="Center" Grid.ColumnSpan="2" Minimum="0" Maximum="100" TickFrequency="1" IsSnapToTickEnabled="True" TickPlacement="BottomRight" Ticks="0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100" Foreground="Black" Margin="2,0,2,0"/>
# <Slider x:Name="BtmGrdMsgOpac_Sldr" Grid.Column="3" Grid.Row="2" VerticalAlignment="Center" Grid.ColumnSpan="2" Minimum="0" Maximum="100" TickFrequency="1" IsSnapToTickEnabled="True" TickPlacement="BottomRight" Ticks="0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100" Foreground="Black" Margin="2,0,2,0"/>
# <Slider x:Name="BtmGrdTpBtmOpac_Sldr" Grid.Column="5" Grid.Row="2" VerticalAlignment="Center" Grid.ColumnSpan="2" Minimum="0" Maximum="100" TickFrequency="1" IsSnapToTickEnabled="True" TickPlacement="BottomRight" Ticks="0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100" Foreground="Black" Margin="2,0,2,0"/>
# Read the XAML
$reader = (New-Object System.Xml.XmlNodeReader $xaml)
$window = [Windows.Markup.XamlReader]::Load($reader)
$xaml.SelectNodes("//*[@*[contains(translate(name(.),'n','N'),'Name')]]") | ForEach {
New-Variable -Name $_.Name -Value $window.FindName($_.Name) -Force
}
#region VARIABLES
$MaximizeWindowBase64 = "iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAAJ8SURBVFhHzZU9b9swEIZFyraydOrQAl0NG16cqf8f7a/wEBRol85BAQMpYLnvcz0qlENlaFhbAs73wfeODyjaDs3zE/b7fXc8Hu9CCIvT6dR2Xdf0fR9k8Xw+E8fVakUelJtfLpdDzAw0qpmWerLFYjHEWNu2+MjGaOlVrUlAcbPZvJNgiRjBLWCoWTIXGNYjr0nBLGCwyJ0hQHBrGGqRC4xgFjAxhnirbxO1pEkw+LDb7T6wiQ8ewQiWAZ+0yXutdTpNNFhrzSG0DKTG43HLgtY5fcxin4WM/ItrRzDkcQrGxcB8VFwTJmkNwmuWYwAVYfB+MjYcL3szDP3o8V6zHOP1TsL4nal6MvQn7zXbD0t3zU5o6gIzHJGsJkyq2R5YdvHDJIzXqsPQR+79Ixhyu9QElzAuqA6T9b+AsXU+SjDyJtRTG8biIoz67IRKMKpBUx2G+hQMORtb4RIG72JmVYPBZ7GZ9/2N+bgmjPfZ5r4+5Hh7ZQQFmDSMuCZMPp/8GUa5iUswmV0NBp39MJZg/F+7Ooye1Gf74Mld37wGQ7MNYkiK3wrjepuPz2HwdkIsJkswmDTVYaiTE1/CWI3FZDkMxhA+JKwGo0dhGcaENGCXMPx48UhYFca95aqPYPDWVIJxYXUYX8O/gMHiKzDN/4CRPcmKMPRZc7Ichssux7BqMO5/ukc3gsEPQAUYu3jyFrv/ZxjZb619kz2wzoN3rXl71uv1fQlGNRuGODU4oOVY1jfUck3qcc3ka8prcU4wyk/p6OcAw56/ZgMj3+gb/93+OijeGkazHw+Hw8NsYBR/VdiH7Xb7mQXEqeFKML3sUa/pByejWt80TfMHmEgVIuyIFegAAAAASUVORK5CYII="
$MinimizeWindowBase64 = "iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAAHMSURBVFhHzZa7TsNAEEX3Ycc0VCngA/IQTaj4eyq+IkUKoKGOkFJEssM9I2+IFIfKwmNpMo+9s3uyayeO4feKm82mORwOdzHGqm3b3DRN6LouytLpdCJOs9mMPCo3X9f1OWYONKqZlnqxqqrOMZZzxicWRkuvaqEApdVqdS9BjRjBFDDULPECw3jimBS4gMES9wwBgqlhqCVuYAQuYFKKaaqniVrRFBjznmDIE4v0E08OgwHkBoY+VzBobIe8wNiYJxhyu6kJ8FPDYNbgBkYa2yEvMKb1BGMxH15grMcVjHITeIFBYz+MXmAUB1cweNuhIsamhKEWl8vlU2kYgOEF7lFvlXMZ796ZSQSWlQOUNYnF8mbUyGW5/wJmvb7410GYfvAWTARGjQ/SjQmjaYZh8AZ065ikmUuUFY8GwzheY1cwWPrrnpFu1J1hXPWjbBBGNRMOwjCx4rFhWPiLnJirr9n6eMSDMDY4/s68K97Jy13D2LVYLJ6HYFSzbUVcGgDEl9pF37l2qSk9vebmMV3WkicY5a1tqRIPMKz57QZGPuiJ/7C/DopTw2ju/Xa73bmBUfymsIvr9fqFAcSl4Z9gOtlex/TJzqjWhRDCD/c8PZjvCKrNAAAAAElFTkSuQmCC"
$RestoreWindowBase64 = "iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAAM1SURBVFhHzZZLixNREIX7kYcbQRhFslCCGTIMwrjy77vwVwTRhYI7N4NDkIEknu/kVnvTyTDpHjC5UKmqU6+T6tuZKYt/p7y5uRkvl8tnZVkOVqtVPR6Pi/V6XUqqzWaDXY1GI/xSvvVwOGxsepAjzLngIYPBoLGRuq7RFYPJpVZYEYSq+Xz+XAlDkkk4BRkwO+dChnjFY5JxFmSQijuDQcKpyYBVXGASzoJMVZXVqd4msMgJMujy+vr6NUNS46PJqCnNJ5ILxXjsYLV0ra37i5ITPnHV1RpsTHWfpHfI4JPUmQyb0ZnInijWmYww92yTQUjsTAYt/yKGdSWDf4iM6lzQmUxq0Gsz+MQOkSHfG+p5gXuTkXhDwi1BBqwvGZr0JkNcEn3QJoNPoQ30sWTSq92bjHq7X5sM4gAEOpJhTm8y4AfJ6F55Q13JIE8hQzz5TT/I4DPYQJsMA+W/VGyqHu80fKrYVNhb6TdPIQPOLNk7ZGzzoeK9zch/JX0hPWQQjWV7oHKeSuZe9h4ZtB8ZBiRaj+kFxTo0dWN8GpODDcbwLmQS9lN6n4x8gofIkDCCTGoCxlwzxEa6kpF/L/1N+gu9mK1YQ4aacjabzdtkEN2R90rkbPigr72tz3AYGpON4ji25bD5lfp4EDg+8hAZ2cXeZpD0NgXWbCPzm0EI3x6tExvbyTmWDJpBLg7JXm3w/LmD+VEgvIVpuC+76oxL2BB/Vtwj1VkeI2MskpH8d4amfMhmrjUiKO4Hv0V5jHTbUs4lBxwhL3wPPkCG0xDKySAUME2J5MRlDVLWIfhsLPLAGCDd9Aof/RAZx0hqk0nr9ibSgCDoIgl4M5w4B518Y0gXMo4/QIaB1mDpfsQGGqJIaqQ524O9Le1OxjV8hGQX0QVpoL8xhVme64hJ8k25RvpPHzJoN0ZyMunN89vDAN0Px9IwCye0cG9NdVKbO/l3O0OOJONzeXn5oU2GoDAXkxwFNEYHltU1WJ4TNSnnUTLo/Pfi5GTkr7x2OedAhpm/z4aMdKG3+bv/dACemox63y4Wi69nQ0b2Z5nr8urq6iMBkqPgP5HhN+JWj+kHmxGm/2GK4i+QNiLMCU3c3wAAAABJRU5ErkJggg=="
$CloseWindowBase64 = "iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAAOPSURBVFhHzZZZTxNRGEA7MwXUqDUlGnwwbtgqGh5M/P+Jv8D4oDzggsFoXFBA+qC09Zzr3FqGWaoR6SQf33K/5XTmzh2S1u8rWV9fXxoMBmeSJGkPh8NsaWmpNRqNEiQdj8fa6eLion6CH/TCwsLEtoc5xEKu8SjtdntiK1mWqVMHm2stsVYESnu93gUSFkw24TRgjAVnXmBcT31MGHMBo6TuGQ0TThvGWOoGNmEuYNI0SU/rbTIWcyJM0H8Cc3h42MHPzJkFhiEZ+sqsMKHGgXnjWhgKlim8RsPriHW1MOag15B7yI1ZYJTYuBEG/yr7LUM6yK28LqyXwbB+3zpriN1m8A10LQx1yZ/CZPgZ+66DXrWuCQY7Y7CPa5X1m3nPUhh0Gu5Qw54pwvhmal+i7o4DY1OGCPCAtSKMNf74HnqlCsZYJYw2CQcUD4owFud3oovfR9r6xNfIM3YMxrcZd4e8zw52hjINo2/TCUABRnETbqMOijBobQd3Wb+LrrwzwqB3CD1lbeQMpQijhE1GzjEYdHi1vWi4RcNvFk/D6AtAyjLSdGeaYXiU4Q5VwaiNExPqFRt4H/8IjEOjTX4pDDITjL6Da2GiGGPAS3L28E8EJtj+Ib8WJr7a5IwZtEmDvZOAUYdHpiFEHcyUH0/bShiuH/iL5Jgb6maCcQ9pzApDU39A2aF3BIb4efI9UB8S90iwvhHGHAf8UxhyzxEbExsiHgnrQjk09qqCwW79a5izxIRx3wQolKe9B6ZvZi2MOtwhF6P8DQzuDrkHv3qOhRkSEybCdZAevT2zQl91ESbEXIzytzDIU/KfIB9YG+UQXgEqj13EXLVPGFwC4zUBKoFRXyaxEgY9ebXti/8M32+VQCGmJh58rvNIpwpGHYAqYEz8RN4WTUrvDHlHzhku3efk+QgDCHkBJtfv0LvoUhil7P+ZCBM2O/KWmCf0scfk9GKdvQlvkv8FP0Bh+9jek/Mx9s61LBMY+xzZQ0UYk4hZvA3AiyaY2BTN65L6I77ie3feY3/Kcyph1Fm3213RqYEJ0MT8XAyIva6DUQCIg/ZI/Y7v3WqE8QrDmmCmCj7MCqONbrElwsdYO+Z6qZU8bxLz/5vYtBZmepAyA0zlq61WYl6M4Q8dOi8wztyfGxi0j3crfDoMnjYMvXc3NjY25wYG+zHmKOn3+49cMDkW/CcY39ZdHtMb7wwxDtBW6yfPEWrZZmOMbQAAAABJRU5ErkJggg=="
$MsgBoxWindowsIconBase64 = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAAEvSURBVFhH7Za7isJAFIajIoKdoNgsLD7IvoONdvoWPsW+hr2sxfZit6+gnSiIhSAW3lj8/7mImURJMo5Zl3zwccaIc44zJ8x4GRlpk1NR04QFWIZ1aH6flCPcwg3cwy8oyKuoKcEGfGRyUoQV+AaZ4yYd2JNDJ3DurhxKzBWoqeiSqooCswDuv2t8OcwCno7ZaHr/P1Uktj0RNtflWeorYMIKbf/xPQLz/6seuP7NLQLzZz2Q+gr8uQJWKrpkoaLAfAta8B2GHcW6c3ms8t7gO1RiMIUDOQyuAC8Oc7iEv3xgwLsCj+y4yU9wBidwxweaKJcO3bVj+CGHYqJveBCfLIjThDr5DxxC6+QkTgFMyL0bwbDtSUSUAniBWMM+ZAM9nTa8e5F0TZRGzXhVPO8MeEYq3onleNMAAAAASUVORK5CYII="
$CloseWindowRedTrnspBase64 = "iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAAQGSURBVFhHxZjbSxRRGMC/mXWn3WZWo02ysMgu6iqVweZTkSlhvURRUJQWWWxBQf0DXSDooZ6KjLVQu0A+dCWIMLC0TegiBYbXvKSWppuul53VzF0733jWW+zMmWztxx5m58ycOT/OfOc7e5YDSuOGlLS8r12O4h+9MTXyID88OkqvhAeB48AmmgOZ1qiOo7HReSvKK19hvSJUnpp8ylHVtKNKHsTTWSdZNIMzKe7RxvfVlzkcme0f686hzKq5Jji/cglsnh8JosFAbw8Pst8PL7r74WxjG9T7hiCJSD1ZF3/GYOL5C4/dHgvKvLQnwRqLCALP02bhA/tIIBJ7Yqzw1O2BWiJF6uIN3hH/8c7hX1xuYhysjRTp7bOHycDDEpMA9zp7YGDEL/EYwHgh3Rqp3PA/2ERCBKmTh/jx2RTumFEj2De6MAeLTCakHAjQM3YweLGwwiTk6veBvbKJlGZw9Q7QWm1cnn6wf6hXCn5nQVMIZbLqWiH/mhPyndchq76NSQoFsmpaIP9GASmFkFXbwiSlKoRD7WjugKL8QtiStlkpRQW3iKC6VFCm6OZt2JKeQUo6FBXeAUdju+brUxXCeB/1+cD4c4jWwJhUIZEKMVLTZYIIgpE8bOyZaqgKSREGyI1fCrsPH4LS4me0lkrhSE2TCiVT9toFu/bthavLFynPVEMzhjKsUVBgi9OU0pIpSFiqPEsLTSFES8rxpQscDd9mLIPgal+KX7wZqXhQpaS7D3JqmuE+CfK0zG20lrT1epXgkCwWWqNfRip5pxyZRihIqJGSJGlGMpPRJYQEpbIdR8Dr7qK1E8hktLIPZv+VDKJbCBF4DriICLJUz6E1Eyiz2mgEgazif4PuVsHZhBlYsvw5Avj69GT06egSCjW15YEB8vrc9Cx0nmKBWUgtz9hSVoPNnsKUPLVgEmLJwHoyuhqaQqwZOFRK0CulKqSs9joy8BSp58W0dnJG75z5ag/CHPIxjVUQylyvVJPeuFTOwSkjJRgFAPKLU2u111w6Ssgry/n8DR7cuUsMA8wZePIyw0mRsGs/abcqNmS74NLBtJaVkHd/ooVM6+GfJIAXa8oEQanjn1uBI6NzdVmMajtdQgjZvylHrd8z02Ftp3txxQfqlUH0tuPxXwhEz1blX+OjfRuJC58ompXNVlkP2zYlHJTSvhNEU4DPtEZ9x5PTDW3QNzKiXJhN+kmMnW38qnzfumBeB38sNtppE81Q5xuCjIpqePbDMz6E4QT7wL6wzxp5EBJFExyJXehUAqhsfdLJo9VNO2vlie3ObIIyebblDzdVVF9Rwv9mu/tteWpyk8nAx+NfIp5ffk7/Ll4fGMDJkjlwYHF0+8WEZZfsbz7dAwD4DTKQQUG7thzpAAAAAElFTkSuQmCC"
$MsgBoxWindowsIconBlueBase64 = "iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAADMklEQVR4nO2WWU8aURTHp03adHtsbJqmSdM+Ne1T05emn6FfocuLDyYV1BYcmICmVmtUxAXlDojWIpCuinVhkVlAQKs2arQUFREIuKFprFTRdJpLA3UZFBv0yZP8k5s7c+5vzp177jkIcmxJ7FlVz43nMgtHiNN6DLf2CQHlgoqNFXQbr5bM5kpM15F0mLiROMOTkblCnJ4u1Q3MvrF5Nz6PLzHm6RWG8v+KCY7hXLPNu1GqG5zFAO3JryO40Pe/oDxAPcJwa6CRmIxYvKsJ0H6C76osExEMpwN8GfkwZWBemeE8Kidbpa3Di8RM6kC2D5B+GllCAaWHa+4Jzamwn0UB+UXXF4j+L3CndM5AFJVT/Um3XiwWn0QBadU6/OvpgsaldfjXUEBSCMOc2AXm1xM5uPH7j3RD4wLdrhW+zMLZBs2Wmi+JG2xBwhc5FCgUPC+iBlswr8yQkQAL5FRhi8O3yeYgM04wJe+HDyTow7aWxuHbRAFRkAALATWVLGXeDc0xamfgQII+yaIWAqs7nj4ZxZq+4GFt8U4VqftDueXERYQrMd6tbh9dOCpwVdvIAldivoNwJYYHSvPkT7YtzqoiUlbcT6wZTMyxbbnC5F6FTAi+L+sYDx9VxDXtY2FOpekeklveffWVdiB0VOBS3WAwp8J8JXZjYQraTx4BlPRFGAynfZD5N48Bpfr4lT0Ftv6zVAV92Nb6MDTLCAGt+FeRpIbbxS3984cd8Ut13xyn0nhz27WJAkqlsae/QMSl7vWtC+QUzlqHBXLSA7uJdEPbx8KMAFCTmUB/jrU0ciq7rmGA8naMh9MG7fy2xGA4NQOzB9mvqRMCejkdp1zd61uDkcI194TGTngdmY2b3LtusoNIP7rIlLT0zwvkZHNKTV9WLXEBNnhbey1YtbRO/+9mm3ez07WcFNblWmaaSM/ai9eOkBCnOrmSnltIqobWERVKszsKc7qJ9ESL1M6QAKdd+fVkCb+GeIoB2oAprB6R0hYobLIHC1T2kEhp82G4dQpT0N28mp4nsKlIGRiPliez0CKFzYwBazW/1vyYK+m6jCQxsfjt6UwwcCrZ82NDdtgfQc4N5Dw11rUAAAAASUVORK5CYII="
$MsgBoxWindowsIconBlackBase64 = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAjklEQVR4nO3VvQkCQRCG4UfzwyYMbMXoCrIBmzGxFROrOLAAHROFS9TA/bmFfWFgk+F7YYZZOp2FEYVq+QK56ALR5Agi4cK1KZCSNgXi3+PSvEBKukA0M4L4smRbXHJ/x/GhaY8p8XX8ybvpgPvrfcKgEDGrB45Ylwo3C79hVIHAFTuVOGOjIqua4R25eQJcLt4V6tEZjwAAAABJRU5ErkJggg=="
$signature = @'
[DllImport("user32.dll")]
public static extern bool MoveWindow(
IntPtr hWnd,
int X,
int Y,
int nWidth,
int nHeight,
bool bRepaint);
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
public static extern bool GetWindowRect(
HandleRef hWnd,
out RECT lpRect);
public struct RECT
{
public int Left; // x position of upper-left corner
public int Top; // y position of upper-left corner
public int Right; // x position of lower-right corner
public int Bottom; // y position of lower-right corner
}
'@
$primaryScreen = [System.Windows.Forms.Screen]::PrimaryScreen
$ScreenHeight = $primaryScreen.Bounds.Height
$ScreenWidth = $primaryScreen.Bounds.Width
$InfoImageBase64 = 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAABusAAAbrAUwxnkoAAAK9SURBVFhHzZdLaxNRFMfPPGJSR5vaJoKYZlNcKBSELlyJduNjo4hbl+ZjiIhfw00/gCiuxE0RQejKQqFVMVi7kIBpMCXTmGQenv+dmUwSEmfuJVF/8E/u3Jm559x7ztwHpcBkFVhXWA9ZfoLwDJ7FO3hXGZ2FRm6yxhlKI7yLNtDWWLTwf5QTrIus+6xHqBA8ng8LCTw5CguCp6znrD1WFxWDjHPgJOsq67W4AmkNjzLsyC3WO9axuAoZdQDGb7BeiCtVw6PEjtxjvWH1nRh0AMO+zgp6Pi3jEbETGIlNlghH5ACSZJW1La6mbTwiduIya4flRdm5yELCzc44iNuGLdgUPce3usaKs12Ghlejrc43qrnfw5o0wBZsmggBvtMfLJXe+7RhH9K+u0h5zaaK9YssvRjem0wciiJGYCUoK6FRycCE0+NSm/sjO/OtGPxzm3VHOfbLhktl84DWc/OU00RcE7meJXrbQWkLIUAPZpt84wjDMHGOTqTtN2jf2aWWF+SPImoONL06vWrXaeO4TM/sOfri1MI70qg5kNcLdHeuSAtah5r+Kao6HFQ11EOQ087QBTMjyga54l8BdQcQ+08OviKPTut2UCmPugNf3SYd+Rj6HhX0oSVWBnUHGp7FvwbngU1l43xQKQ8cqARFCXp+i7a7WL41Ws04lNFUJ5EKHMCyODg/J1P3DuinGH6fp18nqJQgtrUDB6pBWYKCXuKhR9x9+tDN0ufeR+r6Ej3oU0UWY2fynvVAzM+Yp5MwtCxdytjsxCGdMxACl5Z0i+tz4ROTiXuPndFe8Bnx3MbC6nAtlQMgq1lUMhdo2czTWWMplXEQLELYKb9ktf6bLRlGAft2DItcQqZlZOhZsDk0DyAXsG/H1nm6TsRtoW3Y6B9QBrflEf/0YBLx145mfwLhmfnhNA0zPJ4T/QZX9efs3tiwxwAAAABJRU5ErkJggg=='
$QuestionImageBase64 = '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'
$WarningImageBase64 = 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAATKSURBVFhHxVZLb5RVGH7ON/dbW2empTptbUuhNAWsQVBMtQQojU0qUhsKaoCwwxBduPA3GPeuXBiX/gN1a1y4UOpCqPWCLaBjoZZeZtppmeF5vplpoJ355iup4UmezDfnvO973nPOezl42jCl3+1CekEyav8DlsgVsmD/2waexAEv2UWeIg9qgPiZ/Ib8jVzXwP8Fi+whP/cY/JP0YFXUt8ZKc5JxDU/p1y0ayItegwuvJ9F4vhveV5rhya8hciuL1jywyHmdhq7DFbbjgI/sJ6/2RNF5qRfW2b1AXyMnLJg/5hCazeEZzt8gp0n6UxtuHVCstJDv11s4droT/rf3AB31QMwPROjavRWYyTnUrxbsQPyRXCBrwq0DYfIML/fS0SQS7/XAvNgEBKht0TU5oN+/5uGdziBJD25T/jq5JmUnuHFAQaVo/7DVjwPj3fAMtQNxJWEJXkroJJbXYH69i8j9B4hwWLGg4HRMTTcOJMjLAYPTQ60In+tmDjIUs0y2aYbcHMNNJ1FHBwJM0L+XYU3dR/wB/aHeNTIjI9VQywGaxXGe7pUDdWh5l0ffnwJCXGiGi3/xC1eYLTqUDBVPYZ37ZUD606uIU1d14U+S/lSGU84q8NrI8bgHXcfbYB19trhTTawxxm8yzER9a0xzkpGsdKRbsqHpinByQGV2mEd07KVGBAZppjVWDLZq0JxkJHuYOtLl8DBZLtlbUM0BXY0Cb6w9iCYGnXmB+R5UEa4ByUj2FHWky6ExUrYqXnc1B2gCYyGDvtdS8AywAuiOHTa/AclIVjrSlQ0OyQnZ3IJKDgTIARoaPtiAqFJOQaZUcwvJSke6siFbHB4gZfsxbDarDewmx5u8aD/ZBnOkmReoIrxNSEe6siFbHFJAyvZjB7nZgTpyhM2m/+Vd8J1gMKUYPk6BVw3Ska5syJZscniE1BobeNQBhdghcrQrhLgCb3+ShaBKpTBcgE3Ipr4rQbqyIVuyyaFRUmtshHPZvEywxOBKzMLJNzsQGGOzUUqx128Fx3IsLWEe8172P913jLe7WVT/lYuSm83CmvwPDbmCXZR+ItW6Nxxg3GKECpePJNCoZnNoV/W0k+Ew5zrZDfdw8XouXtFRQlehZqXpm/PwzWTs0j5DTpLrckDX0Et+kPKhjz3e80YHU4nNptrRCuU5LeClFQdR+5oirJKLObtZRRfz9oYnyH/lgB4RF30Go4MpRM/vA7o5UivtaAw/pFGY4XM0EYTRUVeDnFX/ULO6swTP1AISrN56L0xITeXy6v4YnlezYfGwvXXakfprehmFryZhfp+H6U2gwGtwOjBY3JBSU32DzSqQztlBeUMOfFRn4cRbfOWcYeC5STtNU8YwuAq7GQOMBRN0OAFBOsoKBeTdLMz14utpRWqfdoXR/M4+mMMsHLUMlSFjqQgMM8WESkFWC9qYriLDd9JEGt5ZPmbtm9aR6mg0sUTyZVOTkpVOWa+SzGbKdlmv/EyS459FLVwYakGk/zmWqQr5vFPQogurwHd3gK9vYXkpjy+1lprEx36DVxNehP1WxQa1Y8jlkb+3jgwL0vf8+4kc0PNSLXOQZBhu7Vg7DJ4BpshvyWvl01boqTjoNesyDJ8YKsV6sGZL308TwEN4uiRpZZrqVAAAAABJRU5ErkJggg=='
$ErrorImageBase64 = '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'
$Instrct48Base64 = "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAADSUlEQVR4nO1ZzWsTQRRfWuvBg9Bkpli/LmKPPakoePDmXxBa9aJ0Zj0IWpCiBCF4aT1qbYkfRw9iRT1oi1BlXjS1ghFpqFLBS9OtgnWjoIWNFkbexg1pTMx+JJsN5gcPlp03s7/f5M3MmxdFaaGFFrwjMtHepcIBwiBKuLhHmXhLmchSJn7+sSzhMI9t6NPFxH4lJtuURqPzeGIH4eISZaBRDtKhLREGIyEmtvtOfMuJZ5RycZ1ykXNBvMREjnCId6uC+EI+rMJRyoXunfh6Iwy+EC7668dcTXVQBjdrTZyWGhPX8Fs15d6tpjZRJqbqTp4XwmoSv1nDmfeTPFghNa1E5jd65u9L2PAKIjjEPZEPs8SxRpGnloiBRJ8r8ltPTYcJg5Vyg1r4tvpLarohFz6uyuTCV3l75pO8cOeDPHQx9VcffIdt6IO+2EfTDXMMCxXWg+5qi83v8+VnxQ6m3qwU/PHZDmjF9SDGHZHH07H4kDoympbLWcORgGJCTv2Xs4bsv5Iu/hVynerznbYFmOlB0QzggF4IufHXdKN0Vxqxxz4m2zBPKRcyfgpArAslBhomjVX5Y1ZZKeYbKoCDDA0k9lUPHwbRoAqgqjhvJ/7vB1UA4XDXhgCYD6wAJtJVBZRLlYMjAFbsCMgFWIDxXwjQmzqESLMvYtL02ygL8EHG4FxVAVh0CqqAMIe9NpM5kfmXALRdp5Ny95mk7B2alXuiL+XB2Csz7T57670ce5yRc4vfC774jO+wDX3QF/v0Ds2aY+BY1b5HmVi0Xc3D1LXqgHU0CyU70LDi9kLTaAGEgRE6+WSbbQHmr8AhXnqhcYL49JLsGUzKnsEZeeOp5ri/VnShIQyuKk6xeeBFyLrU4/UOB/QLmm7IvsvpQsnRdd0Ua5VuQuDw8GuZeJeVq8aa/GGsmc/4zlVIqRBRvABrlX7FPi0xwsWY4hmRiXbC4IHvAhg8UmJiQ+2Ku1xM+ijgYe2KuxbUVEfxzlTXsInVaObLAWuVlUqOHol/9rxgndVNxTgeMJ6JMzBwn8dtW/EbeDrm0471uZM9ExlMDxyfsHVBTLZh0QnrNpiz48Ujf7PDdMQ0nXAxh22YEptZZRD+Zm2hBaX58RuxKnIxzpWEvAAAAABJRU5ErkJggg=="
$PlainInformationBase64 = "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"
$PlainQuestionBase64 = "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"
$PlainWarningBase64 = "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"
$PlainErrorBase64 = "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"
$BlueInformationBase64 = "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"
$BlueQuestionBase64 = "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"
$BlueWarningBase64 = "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"
$BlueErrorBase64 = "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAAzWSURBVHhe5ZsJdFNVGse/95ImaQNdgLYshdIWaFkKuA1rKQUpIA4jjrscN/QcPeMGFimHOTrHEVmsjI6OjoNVFNFBHTgzI9gWSmWH8QADZetKSwtaWtqkJU2TvLw335d3X5uUdEnyKvXM7xhy73dfn/f/5S7fe/deDnqA9DVH6L4cz4GW40DD8xx+cxq0aURJ4iVJ4vAbAP9zgVfzeCFeI+I3WZ2iKDnxGgGvxQ/nRJuUt3Ky8heqoaoD7liLwkmBBFr8BGMq7NKxHYl1RYdTOI7vZzXXjLRbzNGC3dpHcgp6SXQG0d9xvMbBabQ2rS74ms4YVmMIiy4BSawfkDhl/+BbFhSho8xYUyv6SCC35bysniNUccCv1x3knBKPYjhjyZ6PR9SXHUtFcQnNDT9Ot5lrR0uSSL++z6DTnPqwyHPBEYMO8LymrF/CzXsTbl9SKjpFiwMpeCU1YEcE5IC5aw5j66bmDYaygk1J9WXH7zdVn3/IYW0cyC5RlaDg0J/CYhK3RMRN3Bo/6/HzWHkbmoWczKmifIXv+O2AuW8c0nA8H1Kx/4vkmtMFj5qqzz2CzdrAijtHi5eFx+C3Ts4LdgBTNX63yPku4HitNWzo6M8HJqdtikt5sBDHi+bclVNpnPAZnx2Qvvogr9HwuvM7/pzYUHnqYXN10bOSKASz4usJGwwwdgFA3BQAvVG2xU9HB6DdHdNlgPIDctpmAbhwGODMDgAz2jvA5Ygho94Nj03eMnrhi8U4btpzV0z3qTX45IB5aw9rjm3KiHc0m+Zbai++6LA2xbEiTyJiAdJeQJFDvIvtLopTTJcACt4BaKhkBZ5oDX0qjJHDNuiM4Tk3PZZVnpfZ/dbQbQfcsf6I9tRXr4+qrzi5tLmu6klm9iQhBWDG7+Rvf0V3BDmjbD/Avvfxex8zehLSP2Zj+PAJb4+9Z1XxrpVTBWbulC4dMG/tUZygQXt2+7rEmrP7Ntga6+awojaG3gJw+/KeEd4exRH5bwFc/IEZ29D3HZAfNSblxXF3rSjCrPBdF7FDl9PTiDlPBZ3/9u0xl0/kbLFbTNiR3QjCrn/fe9g8/oBNHYsMfVlBD0L/j8Hj5HElKhGguADDJgcrxKS9Od5afymlpaluf2TilPrS3R91OiZ02gKo2Z/etj7p8oncbYLNMpKZZWhQW/JNz//iXUEtIvteHDQPMYOMVm8sGXRT+t2jF2Wcz1sxrcPu0GELoAGv8OvViZdP7vraaWtGV7sx6TGABz688eIJahFj5gM0mwCqTzAjgOh09MeBepblSuXu6S9sbijdne21K3h1AE11xz9bnnC15IeNQss17OBuzM7AIGBV7xCvQE4YdhvNix4tQXI6BrSYaiY0VJzcl7rsG1Np/kfXOcGrA+qKjwy/dqXiFZzuFjKTzJxMgJk0vfUi8QrkhEE4NmgwuFLiCUQU7MOEFkvET4X5J2yNtdhMPEGXeZK+5pAGQ9n59mv1jzCTDE1vqc/1TvEKVDeqI33cQC2L7Ri7UPTKTK14GNLXHuL/+3nmCHPVuc/xaSyEmQHG3Qnwm/W9W7wCtYQhEwBqSwGu0Ewog+PYlKbLJdtSlm1tcO8KHrOAMWp4LE51WQ6L6R5mwlAWo7nl//lliHeHZoesSfiNzxiMIGP4Nl1I+DJLbUVrSNnaBeiRVrA2zvQQTyx685cnnqA634V1dwO13Y3de2baa3tbf/jWhDFyeGyLueYTp92axkwAN90H8Ns/+ewACYcLBe4vLOEnAd2LWsF2nLWOfckM2OeDDHsN4dGPWmorXa3A1QLoTQ5GULM8xNNoGqB4on3eFwK+F9V9UZb8+M1wOlpSUeeseetdr+1YF+A5DqcLzzDXj7m+owr64wTV7kUa5qEWN1DrVHoFSWmeXmDuzbp/qL3Z/LCrVGFgEkt0j64q5kvF1byXi6hRLCGDWhfve/OBoXNWH6TQCXDwa0oHSWqb9pLwgY+e41WmOxX3WVx3IC2j57EMIkkGh7VpLqY4ehutFQVHulzCmPyEz82/u3QmsEfEE6Rl0qMsIyPaW+byPK/hwodPiDdVFp7AwCfUVaIzArxS7JcDfBHQfkQP5G+7Bc0Ir+Eznf2anOf4pvDY5Im89Wp1Sqt4gpq/n7++LxVzF9zj4gnSNMa9G4h9STuOARx7NcsYOZMl/MNXJ/ws4hVGzGCJVvQ8zouew33YIJbwn4Ar6gVV7hkazRIyTodtDC86HQksrypqOqEnHEqg9jheEsVIllcdNSquqniaDrV6lqFhQIzi8d8+LI+PkmGqz/+BCFD9l6eBMHwoyyCSaKRAqM0ltIrj5wzQGf4IUV28grIcJ6OTnwUUMCr6f4McQCusMkJbUk18meoU/PmbbkELsW3YeYyIWGiENFTJEZOKBCJEdSeQNhNqVOB4C8/xfC3L0rKKxxvVQFFDgKpOIG1urZy04+NAUBnLq4qaFVe9JTBQ+wX8GM6zvIz5R5bwn56osCr3bLrCEjKaIP0ZHAQlj1EBSveyhH/4UlGa6nyZ7gJ2Qul1y+o2PqR/zH7sDI3MAHAuz++B0FfxCj+LE0jTme9YBsHBn7Tzk5/5a5VWH4KqGXaLN091ib/iFXrcCbSnQHkXgGh1wXmTnvmwipc4cGJf2MXsMkc3qT4dKnQm1Bcn+ARpOfoZy8jwQboc2oBJgZCkDe6bi1GgVS5CzuWqOh0qdEdgjziBtJzdyTIIx9k0umAUCRKf8/IUKfXlrVW6kLAtcimjpm1drTt0VXFfhKl5LxdXSlhCJgi1pq7cVp2bOUlyPQuItIFXq/PcYpG72udu0FHFfK4wotq9SEPO6ywjo9HqDkiSvFPZ5QDae4tNYg8tG1HeBUVMtKwUoBP8Ea8Q8L2o7v/MRC1tGzD5IMMBjT5kTy7bb+xyAPGr5z67iAWfsKwMran5MSNQRZVPoAR0L6r7D5tZRkZrMH40dfm2iyzbfnk8NtZuMW+gVVRmAteW1oyjPfKeoEehXz9rMn63Pfxg39+u6xOx1HLFy/I4Me2lL6siho9fyfGaembCG1QDbH3G565wQ6G6foXBgpt41GTqFzchc0bGF26Pg+12iJTtzpamLfvSdPn4TrNgbVrAzPJOC6cg77ygHRi9GRK/ez3O+58yg0xwxKCXpme8n7dzmede4uv2zJTlZ0vGAUOvSqKzv9NuHc/MAJXYDeiFYvTo3usEEr/vPYD8LGaQwWa/2RAaubFw6/oGZmrF6y6xmau2NzaUnyi0W0w30y4rZkbvYEDBawEGju19TiDx378DsGsdM8hgkHcoNCZp6a1Pf1BR7mWvoFcHlO3+WJqesdVsqb14uLn+0mzab8eKMKo6CNCCz05Db+09TiDxO18F2PsuM8jg1F4UNWbGwxMfWVu2a8UUr1tmvTqAoPFg8vOfNthMNQWW2sp5klOIYEUAVccBKrBL0JLzjXYCif/kQYBT25lBBsWXD5qYvij53t8X52VO7nD7fIcOIMrzs8Wpz25qsFvq89EJKdgdoliR/P7wwN8A+kQChA76+R1Bwo9/BfDBnQB1nqGu1tDnTMxtd943dtHyotwVUzrdNt+pA4iRtz8p0a5rq+nH723m2iQcGNsOSdA7xNP/xuaC3SI4lIbanncECT+Lz/X/WAqw/325Dm7o+/YviB438wkSj1mhdFe2XNAB3V4ISF93UFu49Y8jzZWnX2q+Wr2EmT2hleXpT/fsgYkDHwKUFDCjJyH9Y7LDhiW/Nf7+V0tyMyerc2DCHeXIjN3SMA8HyAyh5VrbDOFOf2wktKeYVprVODJD7ylpgKvz/v4Ww9uLxsjYLBzxv7tlyTsX8lZ03Ofb4/NS0Pw3jvIYP+rOfbthVENl4eLGS0XPYczQ8WkxCqWTFwLEYViqLEx6c4oilqAHsQtHAAr/hfa2nZ7tweiuJXTwyPci4sZvTlq4tNgpgr2j0b4j/F4Lo03VPDs299Op/CfM1UWLJVFoW2fsjMCPzdlCYxLp2Fx2fNpDp3mdYNnx/AyfhCv47QBi7trD9CyBkRHoy/d8nFRffvyBxkvFix3WprbZQkVwdK8NG5K4OSLh5r/Hpz1+nuPAxmkkIWf5NL/EEwE5QIH23gYhvIY3Yvwwor7seCpOmSOaai4swHECf2r/QdHVfaPjdvBafSkdnY2f/XipUxQtTrvgKHj1Bh+dbQ9tP8UmwUnAaUCC4JJdG0c1VJxM0xvD+kqSM7LFXJtgtzRGi4KtjygfnqbWQ31Z4DVaG4q8pjOG1hjCIss4TlNrs5ib+g2fUDBi9lPFeGMrvcAVJVHCuT1g4QqqOkBhLh21w3tzIGloHyLHcVqel4/Pu47Oi64j9O6n5+Xj8zwn4rVkdqJOOkIv4GUCiOA6Pp+zSu3j8wD/AwAJP5L/tUmnAAAAAElFTkSuQmCC"
$PlainWhiteInstructionBase64 = "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"
$PlainWhiteQuestionBase64 = "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"
$PlainWhiteWarningBase64 = "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAAZiSURBVHhe7ZvLT2RFFMZpkHYaAh0gQGhAYOD/UGM0ExOjjo+oMc5GF44mxsdaN26MmTEmOix0owt1cFDHcQwmOs6WJSwIC97Nq3vCo3nTwIznaz6u1H0/uhu6m1/SufdU1a06VXXqnKrLpeyMEifE60mgb/sBr3nlRAZgc3OzNZ1OX1hZWWkoLy+/H41GV8Lh8EB1dfUcixQv6PzU1NQPD3QgDXksVrxsbW29zj4bQB6L5Y1yXvMCZjiRSDxH0QDyitoKNjY2LnGyLUEZFs8LebMAzGwymXyJoiUoU3RWIBMbM3N8VrBsjI8XPvv7+68eds09eIaP55ScLwGYczweN3V8k5OTt2W2b1FUwDNFsRR2d3df46QagMOzc4x4ltXkjJxaAGZwYWHhBYoK09PTv4RCob/xEyvoZ7ICni1oK3A7u3ZWMjw8fJXFCgvM3MTExB/sh4LM+I/HZxb3SGO2QiqVkuwCswLROyYO7vphF1TEKnaWlpbaWVQDachjMQXWVThh0S7sDQ0NXWExA8hjMQP5CouBgblazT6WhJ05I89q2UidNwpiKTic9t5gMUtQhsUNnMRp0ROcwV+prwJmUC6O6xhlrCxI0n8z8x+nBrs17GX27MKinQ85UTAzq6urW9RTAYcb3foNoTw6ih9nVXs9h7J4ho8roI1TZwWil6XZjo+P/3lcYXRuZGTk0+ODhXukHR8kPINnWUSBbZ2esGgX9vSOb3R09BNmGUAei2Wwc4jZCouBzwKYtZmZmZcpKogZ3xJd/6GYQXZ2j/LWgD4Pz6IOigpoU7esfBF4AOQw83hXV5fpcbe5ubnP5FW3XZtKHp6NxWI/UVRAm2ibom8CDQBmIJFIvEhRAae9SCRyh6JvwuHwXdRFUUHaDmwFgQZgbGzsg87OzmcpaohSu5WVle/LDM0zyTeoA3WhTiZpSNvPQAeKvvA9AHNzc4+IApcpKshm6Fpra+sMxcCgLtRJUUGWwmXoQtEzvgZAnFNsb2/vs9ra2nNM0pAQdVsU/oJi1kCdqJuiRk1Nzbl0Ov05dGJS7sGuTho0RR/29AwODt5lUQPIYzFT7MIidGIxT3i2ADvHJyHrpuiihL1sgrpxHqCoAJ38OETPA4DQY+b4gIQss7CXNVC3LIWfKSpAJz9h0dMAYIQXFxdNd2Ay+/0IWRRzBtpAWxQVoJtXK/A0ALI3/1C87tMUNdbX13fEIWYl7DmBNtDW2traDpM0oBt0lFvX3z24HgCEmvPnz5uGPZmR3oaGhjjFnIO2ZHPUS1EBOoqurk+LrgYAZoVQI2vwYSZpYK+ei7DnBNqE06WoAR2hq9ul4GoAxOyeECdjeuDBfj+fs38E2pS2b1BUgK7QmaItjgMgoScmzuV5igrYo0v+vxTzDtq2OSdchO4ULXEcADGlJ61Oey0tLf25DHtOoG3oQFEBYRG6U7TEdgCwjpLJ5CsUFWT99eUj7DnBsNhHUQG6u/UFBmA+UrHpezkJQdt+38vJdvcOqzGAPBbzBDoJnViNAvvg/ZyQqz9Yjo6OfsxqDCCPxTwDnViNAfSFxQyYbhho+lfNPD/24uJ93/W79lF3PB5/U2bsgnjqTFiFjrK5GWhvb/82SL3i+L4y81diBf1NTU3vua7b4dTl+Ncdl2Dw4YPwy8oXq370NjTM2f8aXpRJGp5H0gTUPzs7+1YqlXpKLCCMNNFvLxqN/tXW1vZN0LpF9y9Fd8NHGaL7TdH9Hcf67dZSNl5F58oHHGH3it7Rd2EEbbyp8lGDX4K8EHEDdISurFIBfdP3QdsHSH4Mjg+vmJikgdNeY2PjR0HM8wgxe8v1bpfnFugIXaEzkzTQN/QRfWXS/wMgB4jHzLw+EM9/LRudB9L4AW8N2OV5AbqKFZieFtFH9JXi4QDALObn5y9mUnTAefT09GTtQ6W6ujrLs4Ndnle6u7uvQHeKCujr0VLImBxCRCQS+Q73era3ty9VVVV9TzEwaFgOMG/LFfuACNJk5rdl1gY6Ojp6s2VpwFW/sKXF5kaUMCDp1/VOI0tg4Cvk9xB/uA+8/vVAdyuHKH37PbOd97uFLBQct/RWn6bJyBXFv7DQCkwPdeh7CDcsq7C8vLwua/UexYJGfEtjfX19DUUFywEoFbR9QKlyNgC8liwhhImDg4OSHIiKior7vD2jRCkr+w8rZgXkABJd8gAAAABJRU5ErkJggg=="
$PlainWhiteErrorBase64 = "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"
$logotestBase64 = "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"
#endregion VARIABLES
#region FUNCTIONS
function Get-TaskBarDimensions {
param (
[System.Windows.Forms.Screen]$Screen = [System.Windows.Forms.Screen]::PrimaryScreen
)
$device = ($Screen.DeviceName -split '\\')[-1]
if ($Screen.Primary) {
$device += ' (Primary Screen)'
}
if ($Screen.Bounds.Equals($Screen.WorkingArea)) {
Write-Warning "Taskbar is hidden on device $device or moved to another screen."
return
}
# calculate heights and widths for the possible positions (left, top, right, and bottom)
$ScreenRect = $Screen.Bounds
$workingArea = $Screen.WorkingArea
$left = [Math]::Abs([Math]::Abs($ScreenRect.Left) - [Math]::Abs($WorkingArea.Left))
$top = [Math]::Abs([Math]::Abs($ScreenRect.Top) - [Math]::Abs($workingArea.Top))
$right = ($ScreenRect.Width - $left) - $workingArea.Width
$bottom = ($ScreenRect.Height - $top) - $workingArea.Height
if ($bottom -gt 0) {
# TaskBar is docked to the bottom
return [PsCustomObject]@{
X = $workingArea.Left
Y = $workingArea.Bottom
Width = $workingArea.Width
Height = $bottom
Position = 'Bottom'
Device = $device
}
}
if ($left -gt 0) {
# TaskBar is docked to the left
return [PsCustomObject]@{
X = $ScreenRect.Left
Y = $ScreenRect.Top
Width = $left
Height = $ScreenRect.Height
Position = 'Left'
Device = $device
}
}
if ($top -gt 0) {
# TaskBar is docked to the top
return [PsCustomObject]@{
X = $workingArea.Left
Y = $ScreenRect.Top
Width = $workingArea.Width
Height = $top
Position = 'Top'
Device = $device
}
}
if ($right -gt 0) {
# TaskBar is docked to the right
return [PsCustomObject]@{
X = $workingArea.Right
Y = $ScreenRect.Top
Width = $right
Height = $ScreenRect.Height
Position = 'Right'
Device = $device
}
}
}
function Enable-Dragging {
param($sender, $e)
# Check if the left mouse button is pressed
if ($e.ChangedButton -eq [System.Windows.Input.MouseButton]::Left) {
$window.DragMove()
}
} # end function Enable-Dragging
function Center-MyWindow {
BEGIN {
if ( 'WindowsUtils.Wutils' -as [type] ) {} else {
Add-Type -MemberDefinition $signature -Name Wutils -Namespace WindowsUtils
}
}
PROCESS {
$TaskBarDimensions = Get-TaskBarDimensions
$TaskbarOffsetWidth = if ($TaskBarDimensions.Position -match 'Left|Right') {$TaskBarDimensions.Width} else {0}
$TaskbarOffsetHeight = if ($TaskBarDimensions.Position -match 'Top|Bottom') {$TaskBarDimensions.Height} else {0}
$TaskBarPosition = $TaskBarDimensions.Position
$phandle = [WindowsUtils.Wutils]::GetForegroundWindow()
$o = New-Object -TypeName System.Object
$href = New-Object -TypeName System.RunTime.InteropServices.HandleRef -ArgumentList $o, $phandle
$rct = New-Object WindowsUtils.Wutils+RECT
[WindowsUtils.Wutils]::GetWindowRect($href, [ref]$rct)
$width = $rct.Right - $rct.Left
$height = $rct.Bottom - $rct.Top
switch ($TaskBarPosition){
'Top' {
$newX = ($ScreenWidth - $width)/2
$newY = ($ScreenHeight - $height)/2 + ($TaskbarOffsetHeight/2)
}
'Bottom' {
$newX = ($ScreenWidth - $width)/2
$newY = ($ScreenHeight - $height)/2 - ($TaskbarOffsetHeight/2)
}
'Left' {
$newX = ($ScreenWidth - $width)/2 + ($TaskbarOffsetHeight/2)
$newY = ($ScreenHeight - $height)/2
}
'Right' {
$newX = ($ScreenWidth - $width)/2 - ($TaskbarOffsetHeight/2)
$newY = ($ScreenHeight - $height)/2
}
Default {
$newX = ($ScreenWidth - $width)/2
$newY = ($ScreenHeight - $height)/2
}
}
[WindowsUtils.Wutils]::MoveWindow($phandle, $newX, $newY, $width, $height, $true)
}
} # end function Center-MyWindow
function Move-MyWindowOffset {
BEGIN {
if ( 'WindowsUtils.Wutils' -as [type] ) {} else {
Add-Type -MemberDefinition $signature -Name Wutils -Namespace WindowsUtils
}
}
PROCESS {
$phandle = [WindowsUtils.Wutils]::GetForegroundWindow()
$o = New-Object -TypeName System.Object
$href = New-Object -TypeName System.RunTime.InteropServices.HandleRef -ArgumentList $o, $phandle
$rct = New-Object WindowsUtils.Wutils+RECT
[WindowsUtils.Wutils]::GetWindowRect($href, [ref]$rct)
$width = $rct.Right - $rct.Left
$height = $rct.Bottom - $rct.Top
$TaskBarDimensions = Get-TaskBarDimensions
$TaskbarOffsetLeft = if ($TaskBarDimensions.Position -eq 'Left') {$TaskBarDimensions.Width} else {0}
$TaskbarOffsetRight = if ($TaskBarDimensions.Position -eq 'Right') {$TaskBarDimensions.Width} else {0}
$TaskbarOffsetTop = if ($TaskBarDimensions.Position -eq 'Top') {$TaskBarDimensions.Height} else {0}
$TaskbarOffsetBottom = if ($TaskBarDimensions.Position -eq 'Bottom') {$TaskBarDimensions.Height} else {0}
# Using OffsetLeft & OffsetTop
if ( $OffsetLeft -ge 0 -and $OffsetTop -ge 0 ) {
$newX = $OffsetLeft + $TaskbarOffsetLeft
$newY = $OffsetTop + $TaskbarOffsetTop
}
# Using OffsetRight & OffsetTop
if ( $OffsetRight -ge 0 -and $OffsetTop -ge 0 ) {
$newX = $ScreenWidth - $OffsetRight - $width - $TaskbarOffsetRight
$newY = $OffsetTop + $TaskbarOffsetTop
}
# Using OffsetLeft & OffsetBottom
if ( $OffsetLeft -ge 0 -and $OffsetBottom -ge 0 ) {
$newX = $OffsetLeft + $TaskbarOffsetLeft
$newY = $ScreenHeight - $OffsetBottom - $height - $TaskbarOffsetBottom
}
# Using OffsetRight & OffsetBottom
if ( $OffsetRight -ge 0 -and $OffsetBottom -ge 0 ) {
$newX = $ScreenWidth - $OffsetRight - $width - $TaskbarOffsetRight
$newY = $ScreenHeight - $OffsetBottom - $height - $TaskbarOffsetBottom
}
[WindowsUtils.Wutils]::MoveWindow($phandle, $newX, $newY, $width, $height, $true)
}
} # end function Move-MyWindowOffset
function Convert-Base64ImageToBitmap(){
param(
[Parameter(Mandatory)]
[string] $base64String
)
# Convert the base64 string to a byte array
$binaryData = [System.Convert]::FromBase64String($base64String)
# Create a MemoryStream from the byte array
$stream = [System.IO.MemoryStream]::new($binaryData)
# Create a BitmapImage and set it as the source for the Image control
$bitmapImage = New-Object System.Windows.Media.Imaging.BitmapImage
$bitmapImage.BeginInit()
# ensure that the image remains available for the lifetime of the BitmapImage
$bitmapImage.CacheOption = [System.Windows.Media.Imaging.BitmapCacheOption]::OnLoad
$bitmapImage.StreamSource = $stream
$bitmapImage.EndInit()
# Make sure to close the stream after the image is loaded
$stream.Close()
return $bitmapImage
} # end function Convert-Base64ImageToBitmap
function Convert-Base64ImageToImage () {
param(
[Parameter(Mandatory)]
[string] $base64String
)
# Convert the base64 string to a byte array
$binaryData = [System.Convert]::FromBase64String($base64String)
# Create a MemoryStream from the byte array
$stream = [System.IO.MemoryStream]::new($binaryData)
# Create a BitmapImage and set it as the source for the Image control
$bitmapImage = New-Object System.Windows.Media.Imaging.BitmapImage
$bitmapImage.BeginInit()
# ensure that the image remains available for the lifetime of the BitmapImage
$bitmapImage.CacheOption = [System.Windows.Media.Imaging.BitmapCacheOption]::OnLoad
$bitmapImage.StreamSource = $stream
$bitmapImage.EndInit()
# Make sure to close the stream after the image is loaded
$stream.Close()
$image = New-Object Windows.Controls.Image
$image.Source = $bitmapImage
return $image
} # end function Convert-Base64ImageToImage
function Maximize-Window {
param($window)
$window.WindowState = [System.Windows.WindowState]::Maximized
} # end function Maximize-Window
# Function to restore the window to its normal size
function Restore-Window {
param($window)
$window.WindowState = [System.Windows.WindowState]::Normal
} # end function Restore-Window
# Function to minimize the window
function Minimize-Window {
param($window)
$window.WindowState = [System.Windows.WindowState]::Minimized
} # end function Minimize-Window
function Set-BGOpacity () {
param(
[Parameter(Mandatory=$false)]
[string] $Opacity = ''
)
if ( $Opacity -ne '' ) {
if ( $Opacity -match '^(0(\.\d{1,3})?|1)$' ) {
# A decimal value between 0-1 detected, applied 'as is'
$window.Background.Opacity = [double]$Opacity
} elseif ( $Opacity -match '^(100(\.0)?%|[0-9]{1,2}(\.[0-9])?%)$' ) {
# A procent value with up to one decimal position detected
# recalculated to a decimal value between 0-1 detected, then applied
$window.Background.Opacity = [double](($Opacity -replace '%','')/100)
} else { $window.Background.Opacity = [double] 0.5 }
} else {
if ( $UseSystemColors.IsPresent ) {
$window.Background.Opacity = [double] 1
}else{
$window.Background.Opacity = [double] 0.5
}
}
}
function Set-MSGOpacity () {
param(
[Parameter(Mandatory=$false)]
[string] $Opacity = ''
)
if ( $Opacity -ne '' ) {
if ( $Opacity -match '^(0(\.\d{1,3})?|1)$' ) {
# A decimal value between 0-1 detected, applied 'as is'
$MsgType_Lbl.Background.Opacity = [double]$Opacity
$MsgBoxBody_Rtx.Background.Opacity = [double]$Opacity
} elseif ( $Opacity -match '^(100(\.0)?%|[0-9]{1,2}(\.[0-9])?%)$' ) {
# A procent value with up to one decimal position detected
# recalculated to a decimal value between 0-1 detected, then applied
$MsgType_Lbl.Background.Opacity = [double](($Opacity -replace '%','')/100)
$MsgBoxBody_Rtx.Background.Opacity = [double](($Opacity -replace '%','')/100)
} else {
$MsgType_Lbl.Background.Opacity = [double] 0.5
$MsgBoxBody_Rtx.Background.Opacity = [double] 0.5
}
} else {
if ( $UseSystemColors.IsPresent ) {
$MsgType_Lbl.Background.Opacity = [double] 0
$MsgBoxBody_Rtx.Background.Opacity = [double] 0
}else{
$MsgType_Lbl.Background.Opacity = [double] 0.5
$MsgBoxBody_Rtx.Background.Opacity = [double] 0.5
}
}
}
function Set-TopBtmOpacity () {
param(
[Parameter(Mandatory=$false)]
[string] $Opacity = ''
)
if ( $Opacity -ne '' ) {
if ( $Opacity -match '^(0(\.\d{1,3})?|1)$' ) {
# A decimal value between 0-1 detected, applied 'as is'
$Top_Grid.Background.Opacity = [double]$Opacity
$Bottom_Grd.Background.Opacity = [double]$Opacity
} elseif ( $Opacity -match '^(100(\.0)?%|[0-9]{1,2}(\.[0-9])?%)$' ) {
# A procent value with up to one decimal position detected
# recalculated to a decimal value between 0-1 detected, then applied
$Top_Grid.Background.Opacity = [double](($Opacity -replace '%','')/100)
$Bottom_Grd.Background.Opacity = [double](($Opacity -replace '%','')/100)
} else {
$Top_Grid.Background.Opacity = [double] 0.1
$Bottom_Grd.Background.Opacity = [double] 0.1
}
} else {
if ( $UseSystemColors.IsPresent ) {
$Top_Grid.Background.Opacity = [double] 1
$Bottom_Grd.Background.Opacity = [double] 1
}else{
$Top_Grid.Background.Opacity = [double] 0.1
$Bottom_Grd.Background.Opacity = [double] 0.1
}
}
if ( $Top_Grid.Background.Opacity -ge 0.5 ) { $WinTitle_Lbl.Foreground = '#FFFFFFFF' }
}
function Set-BGImageAndOpacity () {
$TaskBarDimensions = Get-TaskBarDimensions
$TaskbarOffsetWidth = if ($TaskBarDimensions.Position -match 'Left|Right') {$TaskBarDimensions.Width} else {0}
$TaskbarOffsetHeight = if ($TaskBarDimensions.Position -match 'Top|Bottom') {$TaskBarDimensions.Height} else {0}
$AvailableWidth = $ScreenWidth - $TaskbarOffsetWidth
$AvailableHeight = $ScreenHeight - $TaskbarOffsetHeight
if( $BGImage -ne '' ) {
if ( $BGImage -match '^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=|[A-Za-z0-9+\/]{4})$') {
# Detects if BGImage contains Base64Encoded string
$imageBrush = New-Object System.Windows.Media.ImageBrush
$imageBrush.ImageSource = Convert-Base64ImageToBitmap -base64String $BGImage
if ( $BGImageOpacity -ne '' ) {
if ( $BGImageOpacity -match '^(0(\.\d{1,3})?|1)$' ) {
# A decimal value between 0-1 detected, applied 'as is'
$imageBrush.Opacity = [double]$BGImageOpacity
} elseif ( $BGImageOpacity -match '^(100(\.0)?%|[0-9]{1,2}(\.[0-9])?%)$' ) {
# A procent value with up to one decimal position detected
# recalculated to a decimal value between 0-1 detected, then applied
$imageBrush.Opacity = [double](($BGImageOpacity -replace '%','')/100)
}
}
if ( $imageBrush.ImageSource ) {
$ImageHeight = $imageBrush.ImageSource.Height
$ImageWidth = $imageBrush.ImageSource.Width
$ratio = $ImageHeight / $ImageWidth
if ( $UseBGImageDimensions.IsPresent -and $ImageHeight -le $AvailableHeight -and $ImageWidth -le $AvailableWidth ) {
$window.Height = $imageBrush.ImageSource.Height
$window.Width = $imageBrush.ImageSource.Width
} elseif ( $UseBGImageDimensions.IsPresent ) {
if ( ($AvailableWidth * $ratio) -le $AvailableHeight ) {
$window.Height = $AvailableWidth * $ratio
$window.Width = $AvailableWidth
} elseif ( ($AvailableHeight / $ratio) -le $AvailableWidth ) {
$window.Width = $AvailableHeight / $ratio
$window.Height = $AvailableHeight
}
} else {
$window.Height = $window.Width * $ratio
}
$window.Background = $imageBrush
$MsgType_Lbl.Background = $MsgBoxBody_Rtx.Background
$Ok_Btn.BorderBrush = '#9900FF00'
$Yes_Btn.BorderBrush = '#9900FF00'
$No_Btn.BorderBrush = '#99FF0000'
$Ok_Btn.Background = '#6600FF00'
$Yes_Btn.Background = '#6600FF00'
$No_Btn.Background = '#66FF0000'
}
} else {
# A filepath is presumed
$imageBrush = New-Object System.Windows.Media.ImageBrush
if ( $BGImage -match '^[a-zA-Z]:\\(?:[^\\\/:*?\"<>|\r\n]+\\)*[^\\\/:*?\"<>|\r\n]*$' ) {
# Absolute path detected
$imageBrush.ImageSource = New-Object System.Windows.Media.Imaging.BitmapImage(New-Object System.Uri($BGImage, [System.UriKind]::Absolute))
if ( $BGImageOpacity -ne '' ) {
if ( $BGImageOpacity -match '^(0(\.\d{1,3})?|1)$' ) {
$imageBrush.Opacity = [double]$BGImageOpacity
} elseif ( $BGImageOpacity -match '^(100(\.0)?%|[0-9]{1,2}(\.[0-9])?%)$' ) {
$imageBrush.Opacity = [double](($BGImageOpacity -replace '%','')/100)
}
}
}<#DISABLING RELATIVE PATH#><#
elseif ( $BGImage -match '^(?:\.\.\\|\.\\)?(?:[^\\\/:*?\"<>|\r\n]+\\?)*$' ) {
# Relative path detected
$imageBrush.ImageSource = New-Object System.Windows.Media.Imaging.BitmapImage(New-Object System.Uri($BGImage, [System.UriKind]::Relative))
if ( $BGImageOpacity -ne '' ) {
if ( $BGImageOpacity -match '^(0(\.\d{1,3})?|1)$' ) {
$imageBrush.Opacity = [double]$BGImageOpacity
} elseif ( $BGImageOpacity -match '^(100(\.0)?%|[0-9]{1,2}(\.[0-9])?%)$' ) {
$imageBrush.Opacity = [double](($BGImageOpacity -replace '%','')/100)
}
}
}#>
if ( $imageBrush.ImageSource ) {
$ImageHeight = $imageBrush.ImageSource.Height
$ImageWidth = $imageBrush.ImageSource.Width
$ratio = $ImageHeight / $ImageWidth
if ( $UseBGImageDimensions.IsPresent -and $ImageHeight -le $AvailableHeight -and $ImageWidth -le $AvailableWidth ) {
$window.Height = $imageBrush.ImageSource.Height
$window.Width = $imageBrush.ImageSource.Width
} elseif ( $UseBGImageDimensions.IsPresent ) {
if ( ($AvailableWidth * $ratio) -le $AvailableHeight ) {
$window.Height = $AvailableWidth * $ratio
$window.Width = $AvailableWidth
} elseif ( ($AvailableHeight / $ratio) -le $AvailableWidth ) {
$window.Width = $AvailableHeight / $ratio
$window.Height = $AvailableHeight
}
} else {
$window.Height = $window.Width * $ratio
}
$window.Background = $imageBrush
$MsgType_Lbl.Background = $MsgBoxBody_Rtx.Background
$Ok_Btn.BorderBrush = '#9900FF00'
$Yes_Btn.BorderBrush = '#9900FF00'
$No_Btn.BorderBrush = '#99FF0000'
$Ok_Btn.Background = '#6600FF00'
$Yes_Btn.Background = '#6600FF00'
$No_Btn.Background = '#66FF0000'
}
}
} # end if( $BGImage -ne '' )
}
function Set-UseSystemColors () {
if ( $UseSystemColors.IsPresent -and -not $BGImage ) {
$Top_Grid.Background = '#FF489EE2'
$window.Background = '#FFF7F7F7'
$Bottom_Grd.Background = '#FF489EE2'
}
}
function Set-MessageBoxType() {
switch ($MsgBoxType) {
'Information' {
if( $MsgTypeDescription ){ $MsgType_Lbl.Content = $MsgTypeDescription } else { $MsgType_Lbl.Content = 'Information' }
if ( $UseSystemColors.IsPresent -or $BGImage -ne '' ) {}else{
$MsgType_Lbl.Foreground = '#FF003300'
$MsgBoxBodyBorder.BorderBrush = '#FF003300'
$window.Background = '#FF009933'
}
if ( $UsePlainCircleIcons.IsPresent ) {
if ( $BGImage -ne '' ) {
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $PlainWhiteInstructionBase64
} else {
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $PlainInformationBase64
}
} elseif ( $UseBlueCircleIcons.IsPresent ) {
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $BlueInformationBase64
}else{
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $InfoImageBase64
}
if ( $ShowYesNo.IsPresent ) {
$Ok_Btn.Visibility = 'Hidden'
}else{
$Yes_Btn.Visibility = 'Hidden'
$No_Btn.Visibility = 'Hidden'
}
} # End 'Information'
'Question' {
if( $MsgTypeDescription ){ $MsgType_Lbl.Content = $MsgTypeDescription } else { $MsgType_Lbl.Content = 'Question' }
if ( $UseSystemColors.IsPresent -or $BGImage -ne '' ) {}else{
$MsgType_Lbl.Foreground = '#FF002966'
$MsgBoxBodyBorder.BorderBrush = '#FF002966'
$window.Background = '#FF0099ff'
}
if ( $UsePlainCircleIcons.IsPresent ) {
if ( $BGImage -ne '' ) {
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $PlainWhiteQuestionBase64
} else {
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $PlainQuestionBase64
}
} elseif ( $UseBlueCircleIcons.IsPresent ) {
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $BlueQuestionBase64
}else{
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $QuestionImageBase64
}
$Ok_Btn.Visibility = 'Hidden'
} # End 'Question'
'Warning' {
if( $MsgTypeDescription ){ $MsgType_Lbl.Content = $MsgTypeDescription } else { $MsgType_Lbl.Content = 'Warning' }
if ( $UseSystemColors.IsPresent -or $BGImage -ne '' ) {}else{
$MsgType_Lbl.Foreground = '#FF663300'
$MsgBoxBodyBorder.BorderBrush = '#FF663300'
$window.Background = '#FFff8000'
}
if ( $UsePlainCircleIcons.IsPresent ) {
if ( $BGImage -ne '' ) {
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $PlainWhiteWarningBase64
} else {
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $PlainWarningBase64
}
} elseif ( $UseBlueCircleIcons.IsPresent ) {
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $BlueWarningBase64
}else{
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $WarningImageBase64
}
if ( $ShowYesNo.IsPresent ) {
$Ok_Btn.Visibility = 'Hidden'
}else{
$Yes_Btn.Visibility = 'Hidden'
$No_Btn.Visibility = 'Hidden'
}
} # End 'Warning'
'Error' {
if( $MsgTypeDescription ){ $MsgType_Lbl.Content = $MsgTypeDescription } else { $MsgType_Lbl.Content = 'Error' }
if ( $UseSystemColors.IsPresent -or $BGImage -ne '' ) {}else{
$MsgType_Lbl.Foreground = '#FF4d0000'
$MsgBoxBodyBorder.BorderBrush = '#3F4d0000'
$window.Background = '#FFcc0000'
}
if ( $UsePlainCircleIcons.IsPresent ) {
if ( $BGImage -ne '' ) {
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $PlainWhiteErrorBase64
} else {
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $PlainErrorBase64
}
} elseif ( $UseBlueCircleIcons.IsPresent ) {
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $BlueErrorBase64
}else{
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $ErrorImageBase64
}
if ( $ShowYesNo.IsPresent ) {
$Ok_Btn.Visibility = 'Hidden'
}else{
$Yes_Btn.Visibility = 'Hidden'
$No_Btn.Visibility = 'Hidden'
}
} # End 'Error'
'Instruction' {
if( $MsgTypeDescription ){ $MsgType_Lbl.Content = $MsgTypeDescription } else { $MsgType_Lbl.Content = 'Instruction' }
if ( $UseSystemColors.IsPresent -or $BGImage -ne '' ) {}else{
$MsgType_Lbl.Foreground = '#FF002966'
$MsgBoxBodyBorder.BorderBrush = '#FF002966'
$window.Background = '#FF0099ff'
}
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $Instrct48Base64
if ( $ShowYesNo.IsPresent ) {
$Ok_Btn.Visibility = 'Hidden'
}else{
$Yes_Btn.Visibility = 'Hidden'
$No_Btn.Visibility = 'Hidden'
}
} # End 'Instruction'
'Logotype' {
if( $MsgTypeDescription ){ $MsgType_Lbl.Content = $MsgTypeDescription } else { $MsgType_Lbl.Content = 'Instruction' }
if ( $UseSystemColors.IsPresent -or $BGImage -ne '' ) {}else{
$MsgType_Lbl.Foreground = '#FF002966'
$MsgBoxBodyBorder.BorderBrush = '#FF002966'
$window.Background = '#FF0099ff'
}
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $logotestBase64
if ( $ShowYesNo.IsPresent ) {
$Ok_Btn.Visibility = 'Hidden'
}else{
$Yes_Btn.Visibility = 'Hidden'
$No_Btn.Visibility = 'Hidden'
}
} # End 'Instruction'
Default {
if( $MsgTypeDescription ){ $MsgType_Lbl.Content = $MsgTypeDescription } else { $MsgType_Lbl.Content = 'Information' }
if ( $UseSystemColors.IsPresent -or $BGImage -ne '' ) {}else{
$MsgType_Lbl.Foreground = '#FF003300'
$MsgBoxBodyBorder.BorderBrush = '#FF003300'
$window.Background = '#FF009933'
}
if ( $UsePlainCircleIcons.IsPresent ) {
if ( $BGImage -ne '' ) {
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $PlainWhiteInstructionBase64
} else {
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $PlainInformationBase64
}
} elseif ( $UseBlueCircleIcons.IsPresent ) {
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $BlueInformationBase64
}else{
$MsgTypeImage_Img.Source = Convert-Base64ImageToBitmap -base64String $InfoImageBase64
}
if ( $ShowYesNo.IsPresent ) {
$Ok_Btn.Visibility = 'Hidden'
}else{
$Yes_Btn.Visibility = 'Hidden'
$No_Btn.Visibility = 'Hidden'
}
} # End Default
} # end switch ($MsgBoxType)
}
#endregion FUNCTIONS
$WinMinimize_Btn.Visibility = 'Hidden'
$WinMaximize_Btn.Visibility = 'Hidden'
$Ok_Btn.BorderBrush = '#FF003300'
$Yes_Btn.BorderBrush = '#FF003300'
$No_Btn.BorderBrush = '#FF4d0000'
$Info_Btn.BorderBrush = '#FF404040'
$Ok_Btn.Background = '#7F00FF00'
$Yes_Btn.Background = '#7F00FF00'
$No_Btn.Background = '#7FFF0000'
$Info_Btn.Background = '#40CCCCCC'
$MsgType_Lbl.Background = $MsgBoxBody_Rtx.Background
$BtmGrdClose_Btn.Visibility = 'Hidden'
#region BUTTONIMAGES
# The Minimize and Maximize button is excluded from this, keep for future reference
# because this is the first GUI I'm testing transparent background on
#
# $WinMinimize_Btn.Content = Convert-Base64ImageToImage -base64String $MinimizeWindowBase64
# $WinMaximize_Btn.Content = Convert-Base64ImageToImage -base64String $MaximizeWindowBase64
# $WinClose_Btn.Content = Convert-Base64ImageToImage -base64String $CloseWindowBase64
$WinClose_Btn.Content = Convert-Base64ImageToImage -base64String $CloseWindowRedTrnspBase64
$WinIcon_Img.Source = Convert-Base64ImageToBitmap -base64String $MsgBoxWindowsIconBlackBase64
#endregion BUTTONIMAGES
# Keyword passed in the $KeywordReplace Hashtable is replaced in in the MessageBody
# Add a Keyword before loading function and pass the hashtable
# MyKeywords = @{}
# MyKeywords.Add( '_KEYWORD_','Keyword replacement string')
# MyMsgBoxTranspBG ... -KeywordReplace $MyKeywords
if ( $MsgBoxBody.Length -gt 0 -and $null -ne $KeywordReplace ){
foreach ( $keyword in $KeywordReplace.Keys ){
$MsgBoxBody = $MsgBoxBody -replace $keyword, $KeywordReplace[$keyword]
}
}
Set-MessageBoxType
Set-UseSystemColors
# Set background opacity for Form Window
# Defaults to 50% (0.5)
if ( $BGOpacity ) { Set-BGOpacity -Opacity $BGOpacity } else { Set-BGOpacity }
# Set background opacity for Message Box and Message Header
# Defaults to 50% (0.5)
if ( $MSGOpacity ) { Set-MSGOpacity -Opacity $MSGOpacity } else { Set-MSGOpacity }
# Set background opacity for Top and Bottom list
# Defaults to 50% (0.5)
if ( $TopBtmOpacity ) { Set-TopBtmOpacity -Opacity $TopBtmOpacity } else { Set-TopBtmOpacity }
Set-BGImageAndOpacity
# Set the "Window title"
$WinTitle_Lbl.Content = $MsgBoxTitle
<#HERE#>
if ( $XamlSource.IsPresent ) {
$MsgBoxBody_Rtx.Document = [System.Windows.Markup.XamlReader]::Parse($MsgBoxBody)
}<#
elseif ( $HTMLSource.IsPresent ) {
$Webbrowser_Grd.Visibility = "Visible"
if ( $MsgBoxBody -match 'HTML' ) {
$WebBrowser_Wbrw.NavigateToString( $MsgBoxBody )
} elseif ( $MsgBoxBody -match '' ) {
$WebBrowser_Wbrw.Navigate( $MsgBoxBody )
}
}#>
else {
$MsgBoxBody_Rtx.Document.Blocks.Inlines.Text = $MsgBoxBody
}
if ( $FixedFont.IsPresent -and -not $XamlSource.IsPresent ) {
$MsgBoxBody_Rtx.FontFamily = "Courier New"
$MsgBoxBody_Rtx.FontSize = if($FontSize){$FontSize}else{"12"}
}
else {
$MsgBoxBody_Rtx.FontSize = if($FontSize){$FontSize}else{"12"}
}
if ( -not $FormWidth ) {
if ( $DoubleWidth.IsPresent ) {
$window.Width = "1400"
} elseif( $HalfWidth.IsPresent ) {
$window.Width = "350"
}
} else {
$window.Width = $FormWidth
}
if ( $HideInfoButton ) { $Info_Btn.Visibility = 'Hidden' }
#region CONTROLEVENTS
$window.Add_MouseDown({ Enable-Dragging $this $args })
$WinMinimize_Btn.Add_Click({
Minimize-Window -window $window
})
$WinMaximize_Btn.Add_Click({
if ( $window.WindowState -eq [System.Windows.WindowState]::Normal ) {
Maximize-Window -window $window
$WinMaximize_Btn.Content = Convert-Base64ImageToImage -base64String $RestoreWindowBase64
} else {
Restore-Window -window $window
$WinMaximize_Btn.Content = Convert-Base64ImageToImage -base64String $MaximizeWindowBase64
}
})
$WinClose_Btn.Add_Click({
$window.Close()
})
$Ok_Btn.Add_Click({
$global:result = [System.Windows.Forms.DialogResult]::OK
$window.Close()
})
$Yes_Btn.Add_Click({
$global:result = [System.Windows.Forms.DialogResult]::Yes
$window.Close()
})
$No_Btn.Add_Click({
$global:result = [System.Windows.Forms.DialogResult]::No
$window.Close()
})
$Info_Btn.Add_Click({
Start-Process 'https://myraspberry.sandblom.it/2024/05/24/custom-message-box-with-xaml-transparent-gui/'
})
$CopyMsgToCP_Btn.Add_Click({
# Add necessary types for WPF functionality
Add-Type -AssemblyName PresentationFramework
$rtbRange = New-Object System.Windows.Documents.TextRange(
$MsgBoxBody_Rtx.Document.ContentStart,
$MsgBoxBody_Rtx.Document.ContentEnd
)
# Save RTF-content in a MemoryStream
$memoryStream = New-Object System.IO.MemoryStream
$rtbRange.Save($memoryStream, [System.Windows.DataFormats]::Rtf)
# Create a DataObject with RTF-content
$dataObject = New-Object System.Windows.DataObject
$dataObject.SetData([System.Windows.DataFormats]::Rtf, $memoryStream)
$dataObject.SetData([System.Windows.DataFormats]::UnicodeText, $rtbRange.Text)
# Copy DataObject to clipboard
[System.Windows.Clipboard]::SetDataObject($dataObject, $true)
}) # end $CopyMsgToCP_Btn.Add_Click
if ( $ActivateConfigArea.IsPresent ) {
$Bottom_Grd.Add_MouseEnter({
if ( $Bottom_Grd.Height -eq 4 ) {
$newHeight = 120
$Body_Grd.Margin = New-Object System.Windows.Thickness($Body_Grd.Margin.Left, $Body_Grd.Margin.Top, $Body_Grd.Margin.Right, $newHeight)
$Bottom_Grd.Height = $newHeight
if ( $BGImage ) {
$Bottom_Grd.Background.Color = "#FFFFFFFF"
$Bottom_Grd.Background.Opacity = [double] 0.92
} else {
$Bottom_Grd.Background.Color = $window.Background.Color
$Bottom_Grd.Background.Opacity = [double] 1
}
$BtmGrdClose_Btn.Visibility = 'Visible'
}
})
$BtmGrdClose_Btn.Add_Click({
if ( $Bottom_Grd.Height -ne 4 ) {
$newHeight = 4
$Body_Grd.Margin = New-Object System.Windows.Thickness($Body_Grd.Margin.Left, $Body_Grd.Margin.Top, $Body_Grd.Margin.Right, $newHeight)
$Bottom_Grd.Height = $newHeight
$Bottom_Grd.Background.Color = $Top_Grid.Background.Color
$Bottom_Grd.Background.Opacity = $Top_Grid.Background.Opacity
$BtmGrdClose_Btn.Visibility = 'Hidden'
}
})
$BtmGrdBGOpac_Sldr.Value = $window.Background.Opacity * 100
$BtmGrdBGOpac_Tbx.Text = $window.Background.Opacity * 100
$BtmGrdMsgOpac_Sldr.Value = $MsgBoxBody_Rtx.Background.Opacity * 100
$BtmGrdMsgOpac_Tbx.Text = $MsgBoxBody_Rtx.Background.Opacity * 100
$BtmGrdTpBtmOpac_Sldr.Value = $Top_Grid.Background.Opacity * 100
$BtmGrdTpBtmOpac_Tbx.Text = $Top_Grid.Background.Opacity * 100
$BtmGrdFntSz_Tbx.Text = $MsgBoxBody_Rtx.FontSize
if ( $UseSystemColors.IsPresent ) { $BtmGrdUseSystemColors_CkBx.IsChecked = $true }
if ( $UseBlueCircleIcons.IsPresent ) { $BtmGrdUseBlueCircleIcons_CkBx.IsChecked = $true }
if ( $UsePlainCircleIcons.IsPresent ) { $BtmGrdUsePlainCircleIcons_CkBx.IsChecked = $true }
if ( $FixedFont.IsPresent ) { $BtmGrdFixedFont_CkBx.IsChecked = $true }
if ( $DoubleWidth.IsPresent ) { $BtmGrdDoubleWidth_CkBx.IsChecked = $true }
}
$BtmGrdBGOpac_Sldr.Add_ValueChanged({
param($sender, $e)
$BtmGrdBGOpac_Tbx.text = [math]::Round($sender.Value,1)
$window.Background.Opacity = [double]$BtmGrdBGOpac_Tbx.text / 100
})
$BtmGrdMsgOpac_Sldr.Add_ValueChanged({
param($sender, $e)
$BtmGrdMsgOpac_Tbx.text = [math]::Round($sender.Value,1)
$MsgBoxBody_Rtx.Background.Opacity = [double]$BtmGrdMsgOpac_Tbx.text / 100
$MsgType_Lbl.Background.Opacity = [double]$BtmGrdMsgOpac_Tbx.text / 100
})
$BtmGrdTpBtmOpac_Sldr.Add_ValueChanged({
param($sender, $e)
$BtmGrdTpBtmOpac_Tbx.text = [math]::Round($sender.Value,1)
$Top_Grid.Background.Opacity = [double]$BtmGrdTpBtmOpac_Tbx.text / 100
if ( $Top_Grid.Background.Opacity -ge 0.5 ) {
$WinTitle_Lbl.Foreground = '#FFFFFFFF'
} else {
$WinTitle_Lbl.Foreground = '#FF000000'
}
})
#$WinClose_Btn | gm -MemberType Event
#endregion CONTROLEVENTS
#region FormEvents
$window.Add_KeyDown({
param($sender, $e)
# Check if the 'O' key was pressed
if ($e.Key -eq [System.Windows.Input.Key]::O) {
# Create a new RoutedEventArgs and set the RoutedEvent
$args = [System.Windows.RoutedEventArgs]::new()
$args.RoutedEvent = [System.Windows.Controls.Primitives.ButtonBase]::ClickEvent
# Raise the click event for the Ok button
$Ok_Btn.RaiseEvent($args)
}
# Repeat for 'Y' and 'N' keys
if ($e.Key -eq [System.Windows.Input.Key]::Y) {
$args = [System.Windows.RoutedEventArgs]::new()
$args.RoutedEvent = [System.Windows.Controls.Primitives.ButtonBase]::ClickEvent
$Yes_Btn.RaiseEvent($args)
}
if ($e.Key -eq [System.Windows.Input.Key]::N) {
$args = [System.Windows.RoutedEventArgs]::new()
$args.RoutedEvent = [System.Windows.Controls.Primitives.ButtonBase]::ClickEvent
$No_Btn.RaiseEvent($args)
}
}) # end $window.Add_KeyDown
$window.Add_loaded({
if ( -not $FormHeight -and -not $BGImage <# -and -not $HTMLSource.IsPresent #> ) {
$padding = $Top_Grid.Height
$padding += $Body_Grd.RowDefinitions[0].Height.Value
$padding += $Body_Grd.RowDefinitions[1].Height.Value
$padding += $MsgBoxBody_Rtx.Margin.Top
$padding += $MsgBoxBody_Rtx.Margin.Bottom
$padding += $Body_Grd.RowDefinitions[($Body_Grd.RowDefinitions.Count - 2)].Height.Value
$padding += $Body_Grd.RowDefinitions[($Body_Grd.RowDefinitions.Count - 1)].Height.Value
$padding += $Bottom_Grd.Height
$padding += 18
$DesiredFormHeight = $padding + $MsgBoxBody_Rtx.ExtentHeight
if( $DesiredFormHeight -gt ($ScreenHeight - 240 )){
$DesiredFormHeight = $ScreenHeight - 240
} else {
if ( $ActivateConfigArea.IsPresent ) {
if ( $DesiredFormHeight -lt 300 ) {
$DesiredFormHeight = 300
}
}
}
$window.Height = $DesiredFormHeight
$MsgBoxBody_Rtx.MaxHeight = $Body_Grd.RowDefinitions[2].ActualHeight - 8
} elseif( $FormHeight ) {
$window.Height = $FormHeight
}
if ( ( ( $OffsetLeft -ge 0 ) -xor ( $OffsetRight -ge 0 ) ) -and ( ( $OffsetTop -ge 0 ) -xor ( $OffsetBottom -ge 0 ) )) {
# Using 'Offsets
# $MsgType_Lbl.content = "Using 'Offsets'"
Move-MyWindowOffset
} else {
# Not using 'Offsets'
# $MsgType_Lbl.content = "NOT Using 'Offsets'"
Center-MyWindow
}
}) # end $window.Add_loaded
#endregion FormEvents
# Show the window asynchronously to avoid ISE shutting down
$async = $window.Dispatcher.InvokeAsync({
$window.ShowDialog() | Out-Null
})
$async.Wait() | Out-Null
return $global:result
}