mamaです。
タスクトレイに自作のアイコンを表示しています。アプリケーション内で状態が変化したときに、タスクトレイのアイコン上にバルーンヘルプを表示したいのですが、方法をご存知の方いらっしゃいますか?マウスカーソルがアイコン上に移動したときに通常のツールチップを表示することは簡単にできるのですが、状態変化時にバルーンを出すというのがどうもうまくいきません。どなたかアドバイスをお願いします。
> タスクトレイに自作のアイコンを表示しています。
VB.NETの、System.Windows.Forms.NotifyIconクラスを使っているのでしょうか。
それとも、VB6からShell_NotifyIcon APIを呼んでおられるのでしょうか?
> バルーンを出すというのがどうもうまくいきません
NOTIFYICONDATA構造体のuFlagsメンバに、NIF_INFOを指定してみてください。
VB6.0を使っていてShell_NotifyIconを使っています。uFlagsにNIF_INFOを指定してみましたが、出ませんでした。NOTIFYICONDATA構造体のほかのメンバにも何か設定する必要はありますか?
編集 削除う〜む。ソースを見ないと何とも…。
とりあえず、確認点として、
・NOTIFYICONDATA構造体が、Version 5.0または6.0形式の宣言になっているか
・cbSizeに、正しい値を指定しているか
・バルーンツールチップ対応のOSで実行させているか
といった所を調査してみてください。
参考までに
私の環境
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
--------------------------------------------------------
このままだといろいろと不都合があると思われますので
参考程度にとどめておいてください