タスクトレイを使用する

タスクトレイを制御するテクニックです。
タスクトレイを使用するには Shell_NotifyIcon 関数を使用して制御する事ができます。

サンプル(32bit) ダウンロード

'タスクトレイ関係API&構造体
Private Type NOTIFYICONDATA
     cbSize           As Long
     hwnd             As Long
     uID              As Long
     uFlags           As Long
     uCallbackMessage As Long
     hIcon            As Long
     szTip            As String * 64
End Type
Private pNotifyIconData As NOTIFYICONDATA

Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
Private Const WM_MOUSEMOVE = &H200
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP = &H205
Private Const WM_RBUTTONDBLCLK = &H203

Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long


Private Sub NotifyIcon(MODE As String)
    
    Dim nRC As Long
    
    'NOTIFYICONDATA構造体を設定
    pNotifyIconData.szTip = Form1.Caption & Chr$(0)
    pNotifyIconData.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
    pNotifyIconData.uID = 100
    pNotifyIconData.cbSize = Len(pNotifyIconData)
    pNotifyIconData.hwnd = Picture1.hwnd
    pNotifyIconData.uCallbackMessage = WM_MOUSEMOVE

    pNotifyIconData.hIcon = Picture1.Picture


    Select Case MODE
           Case "ADD"
                nRC = Shell_NotifyIcon&(NIM_ADD, pNotifyIconData)
           Case "MODIFY"
                nRC = Shell_NotifyIcon&(NIM_MODIFY, pNotifyIconData)
           Case "DELETE"
                nRC = Shell_NotifyIcon&(NIM_DELETE, pNotifyIconData)
    End Select

End Sub

サンプル解説

NotifyIconプロシージャに引数"ADD"を渡すとタスクトレイにアイコンを登録しています。
ここで値をセットしている NOTIFYICONDATA構造体の内容は次の通りです。

メンバー I/O 説明
cbSize In 渡す構造体のサイズ。(バイト数)
hwnd In メッセージの返すオブジェクトのハンドル。
サンプルではPicture1のハンドルを渡しています。
uID In アイコンID、よくわかりません。(^^;
uFlags In 動作フラグ。
サンプルはアイコンの表示、Tipの表示、プログラムへのメッセージ送信を指定しています。
uCallbackMessage In タスクトレイでマウスクリックされた場合に返すメッセージのタイプ。
サンプルはVBでイベントを検出できるようにMouseMoveイベントを発生させるように指定しています。
hIcon In タスクトレイに表示するアイコン。
szTip In アイコンにマウスカーソルを合わせたときに表示されるTipの内容。

タスクトレイにアイコンを登録後、アイコンをクリックすると、Picture1のMouseMoveイベントが発生します。
この時、マウスのボタンの状況を示す値はイベントの引数X に入ってきますが、もし、Picture1のScaleModeプロパティが"3 - ピクセル"になっていないと、無理矢理Twipに変換されてしまいマウスのボタンの状況がわからなくなりますので注意が必要です。
あとは、 X の値に応じて処理をします。 X の値はマウスのボタンの状況で次のようになります。

WM_LBUTTONDOWN 左ボタンを押した
WM_LBUTTONUP 左ボタンを離した
WM_LBUTTONDBLCLK 左ダブルクリック
WM_RBUTTONDOWN 右ボタンを押した
WM_RBUTTONUP 右ボタンを離した
WM_RBUTTONDBLCLK 右ダブルクリック

終了時は忘れずにタスクトレイのアイコンを削除しましょう。Form_Unloadイベントがお勧めです。
アイコンの削除は、NotifyIconプロシージャに引数"DELETE"を渡して行っています。
また、アイコン・Tipの変更はいつでも行えます。サンプルでは、NotifyIconプロシージャに引数"MODIFY"を渡して行っています。


[ Window Close ]