vendredi 29 juillet 2016

Zone de notification.

Cet exemple montre comment mettre en place une icône dans la zone de notification (System Tray). Pour cela, nous allons construire notre l’icône avec l'object System.Windows.Forms.NotifyIcon auquel nous allons associer un menu contextuel. Le menu contextuel permettra d'afficher la fenêtre lorsque celle-ci est masquer, de simuler un popup dans la zone de notification, et de quitter l'application.

Exemple


 
#Déclaration.
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

#Construction du menu contextuel.
$itemT1 = New-Object System.Windows.Forms.MenuItem -ArgumentList "Afficher Popup"
$itemT1.Add_Click({
                    #BalloonTipIcon = "None", "Info", "Warning" ou "Error".
                    #ShowBalloonTip(en millisecondes).
                    $TrayIcon.BalloonTipTitle = "Tray Icon"
                    $TrayIcon.BalloonTipText  = $textA1.Text
                    $TrayIcon.BalloonTipIcon  = "Info"  
                    $TrayIcon.ShowBalloonTip(300000)
                 })
$itemT2 = New-Object System.Windows.Forms.MenuItem -ArgumentList "Afficher Fenêtre"
$itemT2.Add_Click({  $formA.Visible = $true  })
$itemT3 = New-Object System.Windows.Forms.MenuItem -ArgumentList "Quitter"
$itemT3.Add_Click({  $formA.Close()  })
$menuT1 = New-Object System.Windows.Forms.ContextMenu
[void]$menuT1.MenuItems.Add($itemT1)
[void]$menuT1.MenuItems.Add($itemT2)
[void]$menuT1.MenuItems.Add($itemT3)

#Construction de l'icone pour la zone de notification.
#Attention : Mettre un chemin valide pour le fichier .ico.
$TrayIcon = New-Object System.Windows.Forms.NotifyIcon
$TrayIcon.Icon = "c:\xxx.ico"   #Image au format .ico.
$TrayIcon.Text = "TrayIcon"     #Texte de l'info bulle.
$TrayIcon.ContextMenu = $menuT1 #Menu contextuel.
$TrayIcon.Visible = $True

#Fenêtre.
$formA = New-Object System.Windows.Forms.form
$formA.Size = New-Object Drawing.Point 200,90
$formA.Text = "Tray Icon"   #Titre de la fenêtre.

#Masque la fenetre dans la barre de taches.
$formA.ShowInTaskbar = $false

#Bouton pour masquer la fenêtre.
$boutonA1 = New-Object Windows.Forms.Button
$boutonA1.Location = New-Object Drawing.Point 95,28
$boutonA1.Size = New-Object System.Drawing.Size(85,23)
$boutonA1.text = "Masquer"
$boutonA1.add_click({  $formA.Visible = $false  })

#Bouton pour afficher un popup dans la zone de notification.
$boutonA2 = New-Object Windows.Forms.Button
$boutonA2.Location = New-Object Drawing.Point 5,28
$boutonA2.Size = New-Object System.Drawing.Size(85,23)
$boutonA2.text = "Popup"
$boutonA2.add_click({   
                      $TrayIcon.BalloonTipTitle = "Tray Icon"
                      $TrayIcon.BalloonTipText  = $textA1.Text
                      $TrayIcon.BalloonTipIcon  = "Info"   #None,Info,Warning,Error
                      $TrayIcon.ShowBalloonTip(300000) 
                   })

#Champ texte pour changer le texte du popup.
$textA1 = New-Object Windows.Forms.TextBox
$textA1.Location = New-Object Drawing.Point 5,5
$textA1.Size = New-Object System.Drawing.Size(175,23)
$textA1.Text = "Changez moi !"

#Afficher la fenêtre.
$formA.controls.add($boutonA1)
$formA.controls.add($boutonA2)
$formA.controls.add($textA1)
[void][System.Windows.Forms.Application]::Run($formA)

#Fin.
$TrayIcon.Dispose()


Merci de remplacer le chemin "c:\xxx.ico" dans l'exemple par un chemin valide vers un fichier .ico (celui de votre choix). Sinon vous obtiendrez une erreur lors de l’exécution de l'exemple.