Visual Basic 編

タスクトレイにアイコンを表示させよう

まずは言わずと知れたAPI関数!!

'------------------------------------------------------
'タスクトレイのアイコンを操作(追加、削除、変更)するAPI関数
'------------------------------------------------------

'<引数>
'dwMessage:定数(NIM_×××参照)
'lpData: NOTIFYICONDATA構造体
'<戻り値>
'正常終了0以外

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

Public Const NIM_ADD = &H0 'アイコン追加
Public Const NIM_MODIFY = &H1 '情報を更新 もともとなかったので追加
Public Const NIM_DELETE = &H2 'アイコン削除

Type NOTIFYICONDATA
cbSize As Long '構造体のサイズ
hWnd As Long '通知を受け取るウインドウのハンドル
uID As Long 'ユーザー定義のID
uFlags As Long '定数(NIF_××参照)
uCallbackMessage As Long '処理するメッセージ(WM_××参照)
hIcon As Long 'アイコンのハンドル
szTip As String * 64 'ツールチップの文字列
End Type

Public Const NIF_ICON = &H2 'アイコンを表示
Public Const NIF_MESSAGE = &H1 'メッセージを受け取る
Public Const NIF_TIP = &H4 'ツールチップを表示


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 'マウス右ボタンがダブルクリックされた
Public Const WM_MBUTTONDOWN = &H207 'マウス中央ボタンを押した
Public Const WM_MBUTTONUP = &H208 'マウス中央ボタンが解放された
Public Const WM_MBUTTONDBLCLK = &H209 'マウス中央ボタンがダブルクリックされた

Public Const WM_KEYDOWN = &H100 'キーボードのキーが押された
Public Const WM_KEYUP = &H101 'キーボードのキーが解放された

Public Const WM_ACTIVE = &H6 'ウインドウがアクティブ、非アクティブになった



Public NID As NOTIFYICONDATA


'--------------------------------------------------------------------------------------------
'■関数名 AddIcon
'■用途 タスクトレイにアイコンを追加する
'■引数 nHwnd:ウインドウのハンドル、nIcon: アイコンのハンドル、nString: ツールチップの文字列
'--------------------------------------------------------------------------------------------
Public Function AddIcon(nHwnd As Long, nIcon As Long, nString As String)

Dim Ret As Long

nString = nString & Chr(0)

With NID
.cbSize = Len(NID) '構造体のサイズを設定
.hIcon = nIcon 'アイコンの設定

.hWnd = nHwnd 'ウインドウの設定
.szTip = nString & Chr(0) 'ツールチップの設定
.uCallbackMessage = WM_MOUSEMOVE 'メッセージの設定
.uFlags = NIF_ICON Or _
NIF_TIP Or _
NIF_MESSAGE 'フラグの設定
.uID = 1 'ユーザーIDの設定
End With


'タスクトレイにアイコンを追加
Ret = Shell_NotifyIcon(NIM_ADD, NID)
'Ret = Shell_NotifyIcon(NIM_MODIFY, NID)
End Function

'-------------------------------------------------------------------------------------------
'■関数名 modifyIcon
'■用途 タスクトレイにアイコンを追加する
'■引数 nHwnd:ウインドウのハンドル、nIcon: アイコンのハンドル、nString: ツールチップの文字列
'--------------------------------------------------------------------------------------------
Public Function modifyIcon(nHwnd As Long, nIcon As Long, nString As String)

Dim Ret As Long

nString = nString & Chr(0)

With NID
'.cbSize = Len(NID) '構造体のサイズを設定
'.hIcon = nIcon   'アイコンの設定
' If Form1.tujyou = 2 Then
' .hIcon = Form1.ImgIcon3.Picture

If Form1.tujyou = 1 Then
.hIcon = Form1.ImgIcon2.Picture

ElseIf Form1.tujyou = 0 Then
.hIcon = nIcon

ElseIf Form1.tujyou = 2 Then 'Ver2.20
.hIcon = Form1.ImgIcon3.Picture 'Ver2.20

End If

'.hIcon =

'.hWnd = nHwnd 'ウインドウの設定
.szTip = nString & Chr(0) 'ツールチップの設定
'.uCallbackMessage = WM_MOUSEMOVE 'メッセージの設定
'.uFlags = NIF_ICON Or _
' NIF_TIP Or _
' NIF_MESSAGE 'フラグの設定
'.uID = 1 'ユーザーIDの設定
End With


'タスクトレイにアイコンを追加
'Ret = Shell_NotifyIcon(NIM_ADD, NID)
Ret = Shell_NotifyIcon(NIM_MODIFY, NID)
End Function
Public Function nullIcon(nHwnd As Long, nIcon As Long, nString As String, t_flag As Integer)

Dim Ret As Long

nString = nString & Chr(0)

With NID
' .cbSize = Len(NID) '構造体のサイズを設定
'.hIcon = nIcon 'アイコンの設定
If t_flag = 0 Then
'nIcon = 0
nIcon = Form1.Imgicon1.Picture



ElseIf t_flag = 1 Then
nIcon = Form1.ImgIcon2.Picture



End If

.hIcon = nIcon

'.hWnd = nHwnd 'ウインドウの設定
.szTip = nString & Chr(0) 'ツールチップの設定
'.uCallbackMessage = WM_MOUSEMOVE 'メッセージの設定
'.uFlags = NIF_ICON Or _
' NIF_TIP Or _
' NIF_MESSAGE 'フラグの設定
'.uID = 1 'ユーザーIDの設定
End With


'タスクトレイにアイコンを追加
'Ret = Shell_NotifyIcon(NIM_ADD, NID)
Ret = Shell_NotifyIcon(NIM_MODIFY, NID)
End Function

'----------------------------------------
'■関数名 DeleteIcon
'■用途 タスクトレイのアイコンを削除する
'----------------------------------------

Public Function DeleteIcon()

Dim Ret As Long
Ret = Shell_NotifyIcon(NIM_DELETE, NID)

End Function