2024-07-14 06:04:08 -05:00
function Set-WinUtilTaskbaritem {
2024-07-12 01:00:32 -05:00
<#
. SYNOPSIS
Modifies the Taskbaritem of the WPF Form
2024-07-14 14:30:11 -05:00
. PARAMETER value
2024-07-12 01:00:32 -05:00
Value can be between 0 and 1 , 0 being no progress done yet and 1 being fully completed
2024-07-14 14:30:11 -05:00
Value does not affect item without setting the state to 'Normal' , 'Error' or 'Paused'
Set-WinUtilTaskbaritem -value 0.5
2024-07-14 14:35:38 -05:00
2024-07-14 14:30:11 -05:00
. PARAMETER state
State can be 'None' > No progress , 'Indeterminate' > inf . loading gray , 'Normal' > Gray , 'Error' > Red , 'Paused' > Yellow
no value needed :
- Set-WinUtilTaskbaritem -state " None "
- Set-WinUtilTaskbaritem -state " Indeterminate "
value needed :
- Set-WinUtilTaskbaritem -state " Error "
- Set-WinUtilTaskbaritem -state " Normal "
- Set-WinUtilTaskbaritem -state " Paused "
2024-07-12 01:00:32 -05:00
. PARAMETER overlay
2024-07-15 05:42:39 -05:00
Overlay icon to display on the taskbar item , there are the presets 'None' , 'logo' and 'checkmark' or you can specify a path / link to an image file .
2024-07-14 14:30:11 -05:00
CTT logo preset :
- Set-WinUtilTaskbaritem -overlay " logo "
Checkmark preset :
- Set-WinUtilTaskbaritem -overlay " checkmark "
2024-07-15 05:42:39 -05:00
No overlay :
- Set-WinUtilTaskbaritem -overlay " None "
2024-07-14 14:30:11 -05:00
Custom icon :
- Set-WinUtilTaskbaritem -overlay " C:\path\to\icon.png "
2024-07-15 12:16:20 -05:00
2024-07-14 14:30:11 -05:00
. PARAMETER description
Description to display on the taskbar item preview
2024-07-12 09:40:45 -05:00
Set-WinUtilTaskbaritem -description " This is a description "
2024-07-12 01:00:32 -05:00
#>
param (
2024-07-14 16:47:36 -05:00
[ string ] $state ,
2024-07-12 01:00:32 -05:00
[ double ] $value ,
2024-07-14 16:47:36 -05:00
[ string ] $overlay ,
[ string ] $description
2024-07-12 01:00:32 -05:00
)
2024-07-15 11:20:11 -05:00
# TODO: Make a better solution for this function, accessing problem when calling Set-WinUtilTaskbaritem inside a runspace. Future me or other contributors, please fix this.
2024-07-15 10:56:55 -05:00
function ConvertTo-Bitmap {
<#
. SYNOPSIS
Converts an image file to a Bitmap object
2024-07-15 12:16:20 -05:00
2024-07-15 10:56:55 -05:00
. PARAMETER image
The path to the image file to convert
2024-07-15 12:16:20 -05:00
2024-07-15 10:56:55 -05:00
. EXAMPLE
ConvertTo-Bitmap -imageFilePath " C:\path\to\image.png "
#>
param (
$imageFilePath
)
2024-07-15 12:16:20 -05:00
2024-07-15 10:56:55 -05:00
# Read the image file as a byte array
$imageBytes = [ System.IO.File ] :: ReadAllBytes ( $imageFilePath )
2024-07-15 12:16:20 -05:00
2024-07-15 10:56:55 -05:00
# Convert the byte array to a Base64 string
$base64String = [ System.Convert ] :: ToBase64String ( $imageBytes )
2024-07-15 12:16:20 -05:00
2024-07-15 10:56:55 -05:00
# Create a streaming image by streaming the base64 string to a bitmap streamsource
$bitmap = New-Object System . Windows . Media . Imaging . BitmapImage
$bitmap . BeginInit ( )
$bitmap . StreamSource = [ System.IO.MemoryStream][System.Convert ] :: FromBase64String ( $base64String )
$bitmap . EndInit ( )
$bitmap . Freeze ( )
2024-07-15 12:16:20 -05:00
2024-07-15 10:56:55 -05:00
# Return the bitmap object
return $bitmap
}
2024-07-12 01:00:32 -05:00
if ( $value ) {
$sync [ " Form " ] . taskbarItemInfo . ProgressValue = $value
}
if ( $state ) {
2024-07-13 19:20:26 -05:00
switch ( $state ) {
2024-07-14 14:30:11 -05:00
'None' { $sync [ " Form " ] . taskbarItemInfo . ProgressState = " None " }
2024-07-13 19:20:26 -05:00
'Indeterminate' { $sync [ " Form " ] . taskbarItemInfo . ProgressState = " Indeterminate " }
'Normal' { $sync [ " Form " ] . taskbarItemInfo . ProgressState = " Normal " }
'Error' { $sync [ " Form " ] . taskbarItemInfo . ProgressState = " Error " }
'Paused' { $sync [ " Form " ] . taskbarItemInfo . ProgressState = " Paused " }
2024-07-14 16:45:32 -05:00
default { throw " [Set-WinUtilTaskbarItem] Invalid state " }
2024-07-13 19:20:26 -05:00
}
2024-07-12 01:00:32 -05:00
}
2024-07-14 14:30:11 -05:00
if ( $overlay ) {
switch ( $overlay ) {
'logo' {
2024-07-15 10:56:55 -05:00
$sync [ " Form " ] . taskbarItemInfo . Overlay = ( ConvertTo-Bitmap -imageFilePath " $env:LOCALAPPDATA \winutil\cttlogo.png " )
2024-07-14 14:30:11 -05:00
}
'checkmark' {
2024-07-15 10:56:55 -05:00
$sync [ " Form " ] . taskbarItemInfo . Overlay = ( ConvertTo-Bitmap -imageFilePath " $env:LOCALAPPDATA \winutil\cttcheckmark.png " ] )
2024-07-14 14:30:11 -05:00
}
2024-07-15 05:42:39 -05:00
'None' {
$sync [ " Form " ] . taskbarItemInfo . Overlay = $null
}
2024-07-14 14:30:11 -05:00
default {
if ( Test-Path $overlay ) {
$sync [ " Form " ] . taskbarItemInfo . Overlay = ( ConvertTo-Bitmap -image $overlay )
}
}
}
2024-07-12 01:00:32 -05:00
}
2024-07-12 09:40:45 -05:00
if ( $description ) {
$sync [ " Form " ] . taskbarItemInfo . Description = $description
}
2024-07-12 01:00:32 -05:00
}