none
バルーンを消す方法 RRS feed

  • 質問

  • VS2008で開発を行なっています。

    NotifyIcon.ShowBalloonTipを利用して

    タスクトレイにバルーンを表示しています。

     

    指定した表示時間が来なくても

    バルーンをプログラム上から消す方法はないでしょうか?

     

    よろしくお願い致します。

    2008年12月17日 11:10

回答

  •  atu さんからの引用

    一時的に

                notifyIcon1.Visible = false;
                notifyIcon1.Visible = true;

     としましたが消えませんでした。

    バルーンだけ残った状態になりました。


    私も試してみましたが

    細かい環境によって動作が異なる様ですね。


     atu さんからの引用

    Balloonのウィンドウハンドルを取得する方法が分かりませんでした。

    どのようにすればBalloonのウィンドウハンドルを取得できるでしょうか?

    EnumWindows等でウィンドウを列挙して
    そのウィンドウにSendMessageでWM_GETTEXTを送って取得したウィンドウタイトルと

    目的のBalloonTipのタイトルとを比較して、目的のウィンドウハンドルを取得

    という様な感じでしょうか。

    アンマネージ WIN32 APIのマネージコードからの呼び出し方は

    下記を参考にしてください。

    # 個人的にはそこまでして実装する様な事かなという気もしますが


    http://www.pinvoke.net/

    2008年12月21日 12:08

すべての返信

  • Balloonのウィンドウに

    WM_LBUTTONDOWN等のメッセージを送れば

    可能だと思います。

    もっと簡単な方法としては

    NotifyIconのVisibleを一時的に切り替えるとか。

    # Iconの表示位置は変わってしまうと思いますが

     

    2008年12月18日 15:50
  • 回答ありがとうございます。

     

    > NotifyIconのVisibleを一時的に切り替えるとか。

    一時的に

                notifyIcon1.Visible = false;
                notifyIcon1.Visible = true;

     としましたが消えませんでした。

    バルーンだけ残った状態になりました。

     

    > Balloonのウィンドウに

    > WM_LBUTTONDOWN等のメッセージを送れば

    > 可能だと思います。

    試そうとしましたが

    Balloonのウィンドウハンドルを取得する方法が分かりませんでした。

    どのようにすればBalloonのウィンドウハンドルを取得できるでしょうか?

     

    申し訳ありませんが、よろしくお願いします。
    2008年12月19日 4:14
  •  atu さんからの引用

    一時的に

                notifyIcon1.Visible = false;
                notifyIcon1.Visible = true;

     としましたが消えませんでした。

    バルーンだけ残った状態になりました。


    私も試してみましたが

    細かい環境によって動作が異なる様ですね。


     atu さんからの引用

    Balloonのウィンドウハンドルを取得する方法が分かりませんでした。

    どのようにすればBalloonのウィンドウハンドルを取得できるでしょうか?

    EnumWindows等でウィンドウを列挙して
    そのウィンドウにSendMessageでWM_GETTEXTを送って取得したウィンドウタイトルと

    目的のBalloonTipのタイトルとを比較して、目的のウィンドウハンドルを取得

    という様な感じでしょうか。

    アンマネージ WIN32 APIのマネージコードからの呼び出し方は

    下記を参考にしてください。

    # 個人的にはそこまでして実装する様な事かなという気もしますが


    http://www.pinvoke.net/

    2008年12月21日 12:08
  •  karashima さんからの引用

    EnumWindows等でウィンドウを列挙して

    そのウィンドウにSendMessageでWM_GETTEXTを送って取得したウィンドウタイトルと

    目的のBalloonTipのタイトルとを比較して、目的のウィンドウハンドルを取得

    という様な感じでしょうか。

     

    ご指摘のやり方でウィンドウを取得しバルーンを消すことができました。

     

    バルーンのタイトルは、"通知領域"になっているみたいですね。

    "通知領域"のウィンドウにWM_LBUTTONDOWNを送ると消すことができました。

     

    大変ありがとうございました。

    2008年12月22日 2:37
  •  atu さんからの引用

    バルーンのタイトルは、"通知領域"になっているみたいですね。

    違いますよ。

    アイコンが表示されているのが、通知領域です。

    多分、BalloonのタイトルはShowBalloonTipの第2パラメータかBalloonTipTitleプロパティの値だと思います。

     atu さんからの引用

    "通知領域"のウィンドウにWM_LBUTTONDOWNを送ると消すことができました。


    # それで可能だと思うのであれば、
    # 「FindWindow等を使用して」と書いたと思います。
    アイコンが通知領域の一番左に表示されているから
    たまたま期待通りに動作しているという事はありませんか?

    2008年12月22日 3:11