タスクトレイにアイコンを表示する | |
1. NOTIFYICONDATA 構造体を定義する | |
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 | |
2. アイコン操作のための定数を定義する | |
Public Const NIM_ADD = &H0 | ' アイコンを追加 |
Public Const NIM_DELETE = &H2 | ' アイコンを削除 |
Public Const NIF_ICON = &H2 | ' アイコンを表示 |
Public Const TRAY_ID = 1 | ' アイコンの ID |
Public Const NIF_MESSAGE = &H1 | ' メッセージを返す |
Public Const NIF_TIP = &H4 | ' ツールチップを表示 |
' Window Message | |
Public Const WM_MOUSEMOVE = &H200 | ' マウスが動いた |
Public Const WM_LBUTTONDOWN = &H201 | ' 左ボタンダウン |
Public Const WM_LBUTTONUP = &H202 | ' 左ボタンアップ |
Public Const WM_LBUTTONDBLCLK = &H203 | ' 左ダブルクリック |
Public Const WM_RBUTTONDOWN = &H204 | ' 右ボタンダウン |
Public Const WM_RBUTTONUP = &H205 | ' 右ボタンアップ |
Public Const WM_RBUTTONDBLCLK = &H206 | ' 右ダブルクリック |
3. API の登録 | |
Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long | |
Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long | |
4. 表示するためのコードを作成する | |
Sub SetTaskTrayIcon() | ' 実行したい場所でこの関数を呼び出す。例) Form_Load |
Dim m_iconTray As NOTIFYICONDATA | ' NOTIFYICONDATA 型の変数を作成 |
With m_iconTray | ' 変数の属性に値を設定 |
.cbSize = LenB(NOTIFYICONDATA) | |
.hwnd = Me.hwnd | |
.uID = TRAY_ID | |
.uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP | |
.uCallbackMessage = &H200 'TRAY_MESSAGE | |
.hIcon = Me.Icon | |
.szTip = "アイコンのヒント" & vbNullChar | |
End With | |
Shell_NotifyIcon(NIM_ADD, m_iconTray) | ' タスクトレイにアイコンを表示 |
End Sub | |
5. 表示したアイコンを削除する | |
Sub ExitTaskTrayIcon() | ' アプリケーションの終了時には必ず呼び出す |
Shell_NotifyIcon(NIM_DELETE, m_iconTray) | ' タスクトレイからアイコンを削除 |
End Sub |
タスクトレイのアイコンからショートカットメニューを表示する | |
1. ショートカットメニューを作成する | |
1-1. メニューエディタを開く | |
1-2. 右図のようにルートメニューを作成し、その下位層にメニューを作成する。この場合「表示」「閉じる」が、実際に表示される。 | |
1-3. ルートのメニューの「表示」チェックを外す | |
2. マウスのイベントを取得する | |
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) | ' マウスが動作したときに呼ばれるイベントハンドラ |
Select Case X \ Screen.TwipsPerPixelX | |
Case WM_LBUTTONUP | ' マウスを左クリックしたとき |
SetForegroundWindow (Me.hwnd) | ' これがないと、ショートカットメニューを表示した後メニューが残る |
PopupMenu mnuMain | ' メニューを呼び出す |
DoEvents | ' OS に制御を返す |
End Select | |
End Sub | |
3. 通常のメニュー処理と同じように On_Click イベントを呼び出し、メニューが選択されたときの動作を作成する |