短いバージョン: Windows メッセージの結果として呼び出される PowerShell のイベントを適切に使用して、バルーン ツールヒントのアイコンを取り除くには助けが必要だと思います。
ロングバージョン:
実行時間の長い PowerShell コマンド (ビルド) があり、完了時にシステム トレイ/通知領域のバルーン ツールチップを介して通知されるようにしたいと考えています。
おおまかに必要な処理を行う Write-BalloonTip スクリプト (以下) を作成できました。唯一の問題は、トレイ アイコンで時々発生するように、トレイ アイコンにマウスを合わせるまで消えないことです。NotifyIconを表すために同じグローバル変数を再利用することで、このスクリプトを再利用して、システム トレイ アイコンが 1 つだけ残るように維持できます (マウスをその上に置くまで)。これはまだハックのように感じます。BalloonTipClosedイベントで通知され、そこで破棄されるようにイベント ハンドラーを追加しようとしました。イベント ハンドラーで、残りのアイコンを削除するために提案された 3 つの手法をすべて試しましたが、役に立ちませんでした。
厄介な部分は、単純な.Dispose
スクリプトの後続の呼び出しで機能するように見えることです。これにより、イベント スクリプト ブロックがまったく呼び出されていないと思います。
別の WinForms アプリでヒントが消えた後に BalloonTipClosed が呼び出されることを確認しました。
基本的なものが欠けていますか?どんな助けでも大歓迎です。ありがとう!
「Write-BalloonTip.ps1」のコードは次のとおりです。
param
(
$text,
$title = "",
$icon = "Info",
$timeout=15000
)
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | out-null
[System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") | out-null
if ($global:writeBalloonTipIcon)
{
# This gets rid of the previous one
$global:writeBalloonTipIcon.Dispose()
}
$global:writeBalloonTipIcon = new-object System.Windows.Forms.NotifyIcon
$global:writeBalloonTipIcon.Icon = [System.Drawing.SystemIcons]::Information
# FIXME: This *should* cleanup the icon after it's done, but it doesn't seem to work
$global:writeBalloonTipIcon.add_BalloonTipClosed(
{
# this *should* work, but it's not. What am I missing?
$global:writeBalloonTipIcon.Icon = $null;
$global:writeBalloonTipIcon.Visible = $false;
$global:writeBalloonTipIcon.Dispose();
});
$global:writeBalloonTipIcon.Visible = $true;
$global:writeBalloonTipIcon.ShowBalloonTip($timeout, $title, $text, $icon);