Hoi,
Ik heb een NotifyIcon die een message popt in een balloon. Wanneer de user op de balloon klikt wordt een eventhandler gestart dat in dit voorbeeld enkel een messagebox weergeeft.
Het runnen van deze code gaat natuurlijk sneller dan ik op zo'n balloon kan klikken, waardoor het script al klaar was met runnen voordat de eventhandler gestart kan worden. Onderstaande code als voorbeeld.
Het probleem is dat de functie al klaar is met runnen wanneer ik op de balloon klik, dus de eventhandler wordt uberhaupt niet gestart.
Om dit te fixen heb ik het volgende geprobeerd:
Ik heb een NotifyIcon die een message popt in een balloon. Wanneer de user op de balloon klikt wordt een eventhandler gestart dat in dit voorbeeld enkel een messagebox weergeeft.
Het runnen van deze code gaat natuurlijk sneller dan ik op zo'n balloon kan klikken, waardoor het script al klaar was met runnen voordat de eventhandler gestart kan worden. Onderstaande code als voorbeeld.
PowerShell:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| function Show-Balloon { $objNotifyIcon = New-Object System.Windows.Forms.NotifyIcon $objNotifyIcon.Icon = 'E:\tmp\icon.ico' $objNotifyIcon.BalloonTipIcon = "Info" $objNotifyIcon.BalloonTipText = "BalloonText" $objNotifyIcon.BalloonTipTitle = "BalloonTitle" $objNotifyIcon.Tag = 'BalloonTag' $objNotifyIcon.Visible = $true $clicked = $false # Eventhandler when user clicks balloon [void](Register-ObjectEvent -InputObject $objNotifyIcon -EventName BalloonTipClicked -Action { $clicked = $true [System.Windows.Forms.MessageBox]::Show('Clicked!') | Out-Null }) # Time to display balloon, in seconds $timeBalloonShown = 10 $objNotifyIcon.ShowBalloonTip($timeBalloonShown * 1000) # wait for the magic click to happen while (-not $clicked) { sleep (0.5) } # dispose the NotifyIcon $objNotifyIcon.Dispose() } Add-Type -AssemblyName System.Windows.Forms # Show balloon Show-Balloon |
Het probleem is dat de functie al klaar is met runnen wanneer ik op de balloon klik, dus de eventhandler wordt uberhaupt niet gestart.
Om dit te fixen heb ik het volgende geprobeerd:
- Boolean toegevoegd om aan te geven of user geklikt heeft, en te slapen zo lang user dat nog niet gedaan heeft (regel 24-26), maar dat zorgt er enkel voor dat de PS console unresponsive wordt.
- Powershell jobs. Zelfde probleem, maar nu in een job.