Question NotifyIcon et ContextMenu

Plus d'informations
il y a 12 ans 5 mois #16063 par Mabire
NotifyIcon et ContextMenu a été créé par Mabire
Bonjour,

Cela fait maintenant un petit moment que je connait powershell. J'ai commencé en modifiant des scripts de sauvegarde pour des serveurs et maintenant je n'arrive plus à m'en passer.

Cela dit, mon problème n'est pas là...

En effet, je suis entrain d'écrire un petit script qui me permettra de gérer mes VMs et j'ai beau essayer, je rencontre un problème avec les menus.

Le but du script est de lister les vms présentent sur la machine afin d'en récupérer l'état et l'adresse IP. Puis ajouter plusieurs menus du type \"Reboot\", \"Start\" sur chaque vm repérée afin d’exécuter la commande correspondante sur la vm sélectionnée. Le tout via un contextmenu sur une icone de notification.
Mon problème, c'est que je ne parvient pas à mettre en place un évenement au clic sur mes différents menus (start, reboot...).

Lorsque je créé un formulaire classique avec un menu du type \"Fichier\", \"Aide\"... je n'ai pas de problème pour affecter un évenement Add_Click au contrôle mais là, dans ce cas, si je m'y prend de la manière, rien ne se passe au clic.

Je ne suis pas sur d'avoir été clair. N'hésitez surtout pas à me le dire. En attendant si l'un de vous peut m'apporter des explications sur ce que je fais mal... Merci d'avance.

Cordialement,

La pièce jointe VMs_Icon_2.ps1 est absente ou indisponible

Pièces jointes :

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 5 mois #16064 par Laurent Dardenne
Salut,
ton script ne contient pas de code d'insertion des composants graphique dans la liste des contrôles de la Form, qq chose comme :
[code:1]$objForm.Controls.Add($MyComponent)[/code:1]
Conçoit ton IHM avec PrimalForm et modifie la en conséquence.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 5 mois #16065 par Laurent Dardenne
Laurent Dardenne écrit:

[code:1]$objForm.Controls.Add($MyComponent)[/code:1]
Conçoit ton IHM avec PrimalForm et modifie la en conséquence.

Cet outil ne gère pas les menus.
Consulte ce script Out-Form , il se peut que tu ais juste à paramétrer plutôt que de coder.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 5 mois #16066 par Mabire
Réponse de Mabire sur le sujet Re:NotifyIcon et ContextMenu
Bonjour,

Je ne parviens pas à ajouter de contrôles à mon formulaire, il me renvoie :

Surcharge introuvable pour « Add » et le nombre d'arguments « 1 ».
Au caractère C:\Vm\VMs_Icon_2.ps1:57 : 1
+ $objForm.controls.Add($MyMenuItem)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest

En revanche un grand merci pour le lien \"Out-Form\". Je pense plutôt explorer cette solution et l'adaptée à mon script pour garder le système de notification.
J'ai réussi à le modifier pour arrêter et démarrer les Vms, reste plus qu'à l'imbriquer dans mon icône....

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 5 mois #16067 par Laurent Dardenne
Mabire Frédéric écrit:

Je ne parviens pas à ajouter de contrôles à mon formulaire, il me renvoie :

Sans le code sous les yeux, on peut peu :ohmy:

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 5 mois #16068 par Mabire
Réponse de Mabire sur le sujet Re:NotifyIcon et ContextMenu
Désolé... Voici la ligne que j'ai mise pour ajouter les contôles.

[code:1]$objForm.controls.add($objNotifyIcon,$objContextMenu,$MyMenuItem)[/code:1]

Et voici le code complet :

[code:1]
# Load Assemblies
[void] [System.Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms\"«»)

# Create new Objects
$objForm = New-Object System.Windows.Forms.Form
$objNotifyIcon = New-Object System.Windows.Forms.NotifyIcon
$objContextMenu = New-Object System.Windows.Forms.ContextMenu
$ExitMenuItem = New-Object System.Windows.Forms.MenuItem

Import-Module Hyper-v

$Vms = Get-VM | ForEach-Object{

$IP = (get-vm -Name $_.Name | Select-Object -ExpandProperty networkadapters).IPAddresses[0]

$MyMenuItem = New-Object System.Windows.Forms.MenuItem
$Reboot = New-Object System.Windows.Forms.ToolStripMenuItem('Reboot')
$Start = New-Object System.Windows.Forms.ToolStripMenuItem('Start')

$MyMenuItem.Text = $_.Name + \" -- \" + $_.State + \" -- \" + $IP

$Start.add_Click({

## Comment faire pour que ça marche ici ??

})

$MyMenuItem.MenuItems.Add($Reboot) | Out-Null
$MyMenuItem.MenuItems.Add($Start) | Out-Null
$objContextMenu.MenuItems.Add($MyMenuItem) | Out-Null

}

$ExitMenuItem.Index = $i+1
$ExitMenuItem.Text = \"Quitter\"
$ExitMenuItem.add_Click({
$objForm.Close()
$objNotifyIcon.visible = $false
})

$objContextMenu.MenuItems.Add($ExitMenuItem) | Out-Null

$icon = [system.drawing.icon]::ExtractAssociatedIcon(\"C:\Windows\System32\virtmgmt.msc\"«»)
$objNotifyIcon.Icon = $icon
$objNotifyIcon.Text = \"Hyper-V Monitor\"

$objNotifyIcon.ContextMenu = $objContextMenu
$objForm.ContextMenu = $objContextMenu

$objForm.Controls.Add($objNotifyIcon,$objContextMenu,$MyMenuItem)

$objNotifyIcon.Visible = $true
$objForm.Visible = $false
$objForm.WindowState = \"minimized\"
$objForm.ShowInTaskbar = $false
$objForm.add_Closing({ $objForm.ShowInTaskBar = $False })

$objForm.ShowDialog()
[/code:1]

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.050 secondes
Propulsé par Kunena