現在オフラインです。再接続するためにインターネットの接続を待っています

Visual Basic から直接システム トレイを使用する方法

概要
この資料では、Visual Basic を使用して Windows システム トレイ (タスク バーの通知領域) の機能を活用する方法を紹介します。この方法を使用すると、タスク バーの通知領域に任意のアイコンを配置することができ、そのアイコンにマウス ポインタを合わせると指定のヒントが表示され、アイコンをクリックするとアプリケーションのサイズが復元され、右クリックするとポップアップ メニューが表示されるようにすることができます。このような機能を実装できるのは、Visual Basic ではコールバックを直接処理できるためです。これにより、Shell32.dll に含まれている Shell_NotifyIcon 関数の機能を活用できます。
詳細
以下のサンプル コードは、フォームと標準モジュールが 1 つ以上含まれている Visual Basic プロジェクトであれば、任意のプロジェクトに追加することができます。

手順例

  1. プロジェクトの標準モジュールの宣言セクションに以下のコードを追加します。
          'user defined type required by Shell_NotifyIcon API call      Public 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      'constants required by Shell_NotifyIcon API call:      Public Const NIM_ADD = &H0      Public Const NIM_MODIFY = &H1      Public Const NIM_DELETE = &H2      Public Const NIF_MESSAGE = &H1      Public Const NIF_ICON = &H2      Public Const NIF_TIP = &H4      Public Const WM_MOUSEMOVE = &H200      Public Const WM_LBUTTONDOWN = &H201     'Button down      Public Const WM_LBUTTONUP = &H202       'Button up      Public Const WM_LBUTTONDBLCLK = &H203   'Double-click      Public Const WM_RBUTTONDOWN = &H204     'Button down      Public Const WM_RBUTTONUP = &H205       'Button up      Public Const WM_RBUTTONDBLCLK = &H206   'Double-click      Public Declare Function SetForegroundWindow Lib "user32" _      (ByVal hwnd As Long) As Long      Public Declare Function Shell_NotifyIcon Lib "shell32" _      Alias "Shell_NotifyIconA" _      (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean      Public nid As NOTIFYICONDATA					
  2. 対象のアプリケーションのシステム トレイ アイコン (通知領域のアイコン) に対して応答を返すプロジェクト内のフォームに、以下のコードを追加します。
          Private Sub Form_Load()       'the form must be fully visible before calling Shell_NotifyIcon       Me.Show       Me.Refresh       With nid        .cbSize = Len(nid)        .hwnd = Me.hwnd        .uId = vbNull        .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE        .uCallBackMessage = WM_MOUSEMOVE        .hIcon = Me.Icon        .szTip = "Your ToolTip" & vbNullChar       End With       Shell_NotifyIcon NIM_ADD, nid      End Sub      Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)      'this procedure receives the callbacks from the System Tray icon.      Dim Result As Long      Dim msg As Long       'the value of X will vary depending upon the scalemode setting       If Me.ScaleMode = vbPixels Then        msg = X       Else        msg = X / Screen.TwipsPerPixelX       End If       Select Case msg        Case WM_LBUTTONUP        '514 restore form window         Me.WindowState = vbNormal         Result = SetForegroundWindow(Me.hwnd)         Me.Show        Case WM_LBUTTONDBLCLK    '515 restore form window         Me.WindowState = vbNormal         Result = SetForegroundWindow(Me.hwnd)         Me.Show        Case WM_RBUTTONUP        '517 display popup menu         Result = SetForegroundWindow(Me.hwnd)         Me.PopupMenu Me.mPopupSys       End Select      End Sub      Private Sub Form_Resize()       'this is necessary to assure that the minimized window is hidden       If Me.WindowState = vbMinimized Then Me.Hide      End Sub      Private Sub Form_Unload(Cancel As Integer)       'this removes the icon from the system tray       Shell_NotifyIcon NIM_DELETE, nid      End Sub      Private Sub mPopExit_Click()       'called when user clicks the popup menu Exit command       Unload Me      End Sub      Private Sub mPopRestore_Click()       'called when the user clicks the popup menu Restore command       Dim Result As Long       Me.WindowState = vbNormal       Result = SetForegroundWindow(Me.hwnd)       Me.Show      End Sub					
  3. 上のコードを追加したのと同じフォームで、以下のようにプロパティを設定します。
       プロパティ           タスク バーの通知領域のサンプル コードに必要な設定   -----------------------------------------------------------------------   Icon           = (システム トレイに表示するアイコンを設定)   Minbutton      = True   ShownInTaskbar = False					
  4. メニュー エディタを使用して、同じフォームに以下のメニュー項目を追加します。
       キャプション      名前           有効      表示     階層   ---------------------------------------------------------   &SysTray     mPopupSys      オン      オフ     メイン メニュー   &Restore     mPopRestore    オン      オン     サブ メニュー   &Exit        mPopExit       オン      オン     サブ メニュー					
必要に応じてこの他のメニュー項目を追加することもできます。

タスク バーの通知領域の柔軟性

通知領域のアイコンに対して表示されるヒントを変更するには、Form_Load プロシージャ内の次の行を変更します。
   .szTip = "Your ToolTip" & vbNullChar				
"Your ToolTip" の部分を、表示するテキストに置き換えます。

タスク バーの通知領域に表示されるアイコンを変更するには、Form_Load プロシージャの次の行を変更します。
   .hIcon = Me.Icon				
Me.Icon の部分をプロジェクトのアイコンに置き換えます。

定数 NIM_ADD を使用した後は任意のタイミングでタスク バーの通知領域の設定を変更することができます。変更するには、nid 変数の値を設定し直してから、以下のように Shell_NotifyIcon API を呼び出します。
   Shell_NotifyIcon NIM_MODIFY, nid.				
ただし、コールバックの受信に別のフォームを使用するには、まず "Shell_NotifyIcon NIM_Delete, nid " を使用して現在のアイコンを削除する必要があります。これは、NIM_Modify 関数で新しい Hwnd が受け入れられないためです。または、nid 型に新しい形式 Hwnd を設定した後、"Shell_NotifyIcon NIM_ADD, nid" を使用して、新しいフォーム用のアイコンを systray に追加する必要があります。また、Windows システム トレイにアイコンを表示するフォームごとに個別の nid 型を宣言して、NIM_DELETE および NIM_ADD を使用して、各フォームのアクティブ化イベントで変更します。
関連情報
Visual Basic 4.0 またはそれ以前のバージョンからシステム トレイまたはタスク バーの通知領域を使用する関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
149276 Windows 95、98、Windows Me のタスク バーの通知領域でアイコンを使用する方法
Taskbar
プロパティ

文書番号:176085 - 最終更新日: 10/17/2006 04:43:49 - リビジョン: 2.4

  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Visual Basic Control Creation Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • kbbug kbhowto KB176085
フィードバック