Question
NotifyIcon et ContextMenu
- Mabire
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 5
- Remerciements reçus 0
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,
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 12 ans 5 mois #16064
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:NotifyIcon et ContextMenu
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.
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 12 ans 5 mois #16065
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:NotifyIcon et ContextMenu
Laurent Dardenne écrit:
Consulte ce script Out-Form , il se peut que tu ais juste à paramétrer plutôt que de coder.
Cet outil ne gère pas les menus.[code:1]$objForm.Controls.Add($MyComponent)[/code:1]
Conçoit ton IHM avec PrimalForm et modifie la en conséquence.
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.
- Mabire
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 5
- Remerciements reçus 0
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....
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: (
+ 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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 12 ans 5 mois #16067
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:NotifyIcon et ContextMenu
Mabire Frédéric écrit:
Sans le code sous les yeux, on peut peuJe ne parviens pas à ajouter de contrôles à mon formulaire, il me renvoie :
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Mabire
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 5
- Remerciements reçus 0
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]
[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.053 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- NotifyIcon et ContextMenu