Powershell/C#] Eventhandler NotifyIcon

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Morphogenesis
  • Registratie: Juni 2009
  • Laatst online: 06-10 10:15
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.

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.
Het zal vast iets simpels zijn en/of the maken hebben met threads, maar ik zit een beetje vast. Kan iemand mij een tik in de juiste richting geven hoe ik in PS kan wachten (voor een gegeven tijd) tot een user op de balloon klikt en dat ook de eventhandler wordt uitgevoerd?

Alle reacties


Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 23:25
Hoe run je je script? Als je een ps1 file execute dan zal deze aan het eind gewoon stoppen (en de console sluiten).
Powershell starten met de -noexit switch is dan een optie. Een ander (dirty) alternatief is een Read-Host als laatste regel in je script zetten zodat het script op user input wacht en dus niet terminate