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