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

文書翻訳 文書翻訳
文書番号: 176085 - 対象製品
すべて展開する | すべて折りたたむ

目次

概要

この資料では、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 のタスク バーの通知領域でアイコンを使用する方法

プロパティ

文書番号: 176085 - 最終更新日: 2006年10月17日 - リビジョン: 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
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com