バルーンヘルプを表示するには?


mama  2004-03-11 22:47:20  No: 112327  IP: [192.*.*.*]

mamaです。
タスクトレイに自作のアイコンを表示しています。アプリケーション内で状態が変化したときに、タスクトレイのアイコン上にバルーンヘルプを表示したいのですが、方法をご存知の方いらっしゃいますか?マウスカーソルがアイコン上に移動したときに通常のツールチップを表示することは簡単にできるのですが、状態変化時にバルーンを出すというのがどうもうまくいきません。どなたかアドバイスをお願いします。

編集 削除
魔界の仮面弁士  2004-03-12 02:14:46  No: 112328  IP: [192.*.*.*]

> タスクトレイに自作のアイコンを表示しています。

VB.NETの、System.Windows.Forms.NotifyIconクラスを使っているのでしょうか。
それとも、VB6からShell_NotifyIcon APIを呼んでおられるのでしょうか?

> バルーンを出すというのがどうもうまくいきません
NOTIFYICONDATA構造体のuFlagsメンバに、NIF_INFOを指定してみてください。

編集 削除
mama  2004-03-18 01:01:06  No: 112329  IP: [192.*.*.*]

VB6.0を使っていてShell_NotifyIconを使っています。uFlagsにNIF_INFOを指定してみましたが、出ませんでした。NOTIFYICONDATA構造体のほかのメンバにも何か設定する必要はありますか?

編集 削除
魔界の仮面弁士  2004-03-18 01:14:15  No: 112330  IP: [192.*.*.*]

う〜む。ソースを見ないと何とも…。

とりあえず、確認点として、
・NOTIFYICONDATA構造体が、Version 5.0または6.0形式の宣言になっているか
・cbSizeに、正しい値を指定しているか
・バルーンツールチップ対応のOSで実行させているか
といった所を調査してみてください。

編集 削除
kara  2004-03-18 11:56:53  No: 112331  IP: [192.*.*.*]

参考までに
私の環境
WinXP SP1
Shell32.dll 6.0.2800.1145
で動作したソースを載せておきます

フォームにボタンとラベルを貼り付けておいてください

Module1
--------------------------------------------------------
'API宣言
Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

'構造体宣言
Public Type NOTIFYICONDATA
  cbSize As Long
  hWnd As Long
  uID As Long
  uFlags As Long
  uCallbackMessage As Long
  hIcon As Long
  szTip As String * 128
  dwState As Long
  dwStateMask As Long
  szInfo As String * 256
  uTimeoutOrVersion As Long
  szInfoTitle As String * 64
  dwInfoFlags As Long
End Type

Public Const NIM_ADD = &H0
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2

Public Const NIF_MESSAGE = &H1
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4
Public Const NIF_INFO = &H10

'マウス操作
Public Const WM_MOUSEMOVE = &H200
Public Const WM_USER = &H400
Public Const NIN_BALLOONSHOW = (WM_USER + 2)
Public Const NIN_BALLOONUSERCLICK = (WM_USER + 5)
--------------------------------------------------------

Form1
--------------------------------------------------------
Option Explicit

Private Sub Command1_Click()
    Dim ret As Long
    Dim trayicon As NOTIFYICONDATA
    
    '-------------バルーン表示-------------
    With trayicon
        .cbSize = Len(trayicon)
        .uFlags = NIF_INFO
        .hWnd = Form1.hWnd
        .szInfoTitle = "TitleTest" & Chr(0)
        .szInfo = "MessageTest" & Chr(0)
        .dwInfoFlags = 1
    End With
    
    ret = Shell_NotifyIcon(NIM_MODIFY, trayicon)
    '-------------バルーン表示END-------------
    
End Sub

Private Sub Form_Load()
    Dim ret As Long
    Dim trayicon As NOTIFYICONDATA
    
    Form1.ScaleMode = 3
    
    '-------------タスクトレイへ表示-------------
    With trayicon
        .cbSize = Len(trayicon)
        .hWnd = Form1.hWnd
        .uID = 0&
        .uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
        .uCallbackMessage = WM_MOUSEMOVE
        .hIcon = Form1.Icon
        .szTip = "TipTest" & Chr(0)
    End With
    ret = Shell_NotifyIcon(NIM_ADD, trayicon)
    '-------------タスクトレイへ表示END-------------
    
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Select Case X
        Case NIN_BALLOONSHOW
            Label1.Caption = "表示された"
        Case NIN_BALLOONUSERCLICK
            Label1.Caption = "クリック"
    End Select
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Dim ret As Long
    Dim trayicon As NOTIFYICONDATA
    
    '-------------タスクトレイから削除-------------
    With trayicon
        .cbSize = Len(trayicon)
        .hWnd = Form1.hWnd
        .uID = 0&
    End With
    
    ret = Shell_NotifyIcon(NIM_DELETE, trayicon)
    '-------------タスクトレイから削除END-------------
    
End Sub
--------------------------------------------------------

このままだといろいろと不都合があると思われますので
参考程度にとどめておいてください

編集 削除