Anzeige eines QuickInfo-Infobereichs in der PowerShell

8

Kurzversion : Ich denke, dass ich Hilfe bei der korrekten Verwendung von Ereignissen in PowerShell benötige, die als Ergebnis einer Windows-Meldung aufgerufen werden, um das Symbol eines Balloon-Tooltips zu entfernen.

Lange Version :

Ich habe einen lang laufenden PowerShell-Befehl (einen Build), über den ich benachrichtigt werden möchte, wenn er über eine Sprechblasen-QuickInfo in der Taskleiste / im Infobereich vervollständigt wird.

Ich konnte ein Write-BalloonTip-Skript (unten) erstellen, das in etwa dem entspricht, was ich möchte. Das einzige Problem ist, dass manchmal mit Tray-Icons passiert , das Tray-Icon verschwindet erst, wenn ich die Maus darüber bewege. Indem Sie dieselbe globale Variable erneut verwenden, um die NotifyIcon zu repräsentieren, I bin in der Lage, dieses Skript wiederzuverwenden und es so zu behalten, dass nur ein Taskleistensymbol übrig bleibt (bis ich die Maus darüber bewege). Das fühlt sich immer noch an wie ein Hack. Ich habe versucht, einen Event-Handler hinzuzufügen, damit er auf dem benachrichtigt wird BalloonTipClosed Event und dann entsorgen Sie es dort. Im Event-Handler habe ich alle drei vorgeschlagenen Techniken ausprobiert, um das veraltete Icon loszuwerden, ohne Erfolg.

Der nervige Teil ist, dass eine einfache .Dispose bei nachfolgenden Aufrufen des Skripts zu funktionieren scheint, was mich zu der Annahme verleitet, dass der Ereignisskriptblock überhaupt nicht aufgerufen wird.

Ich habe überprüft, dass BalloonTipClosed aufgerufen wird, nachdem der Tipp in einer separaten WinForms-App ausgeblendet wurde.

Vermisse ich etwas Grundlegendes? Jede Hilfe wird sehr geschätzt. Danke!

Hier ist der Code für "Write-BalloonTip.ps1":

%Vor%     
Jeff Moser 01.02.2010, 19:01
quelle

2 Antworten

2

Ich denke, Sie müssen diesen Code in einem STA-Thread ausführen. PowerShell (v2 hier gezeigt) wird standardmäßig in einem MTA-Thread ausgeführt:

%Vor%     
Aaron Lerch 01.02.2010, 19:24
quelle
1

Ich würde empfehlen, das Register-ObjectEvent zu verwenden, um das BalloonTipClosed-Ereignis zu abonnieren. Dies ist kürzlich in einem weiteren SO-Post aufgetaucht. Schau es dir an.

    
Keith Hill 01.02.2010 20:34
quelle