タスクトレイを使用する
タスクトレイを制御するテクニックです。
タスクトレイを使用するには 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 ]