Rubrik: System/Windows · Sonstiges | VB-Versionen: VB4, VB5, VB6 | 12.05.02 |
Anzeigen der Anwendung im System Tray Dieses Beispiel zeigt, wie sich eine Anwendung im System-Tray der Taskbar anzeigen lässt - ohne zusätzliche PictureBox. | ||
Autor: Mephisto | Bewertung: | Views: 72.201 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Wollten Sie schon immer Ihre Anwendung im SysTray haben, um z.B. bei einem Rechtsklick ein Popup-Menü erscheinen zu lassen, etc.? Mit folgendem Quellcode können Sie das schnell und einfach bewerkstaelligen. Der Code wird das Icon Ihrer Anwendung im System-Tray der Taskbar links neben der Uhrzeit-Anzeige anzeigen. Klickt der Anwender nun auf das Symbol, wird ein Ereignis ausgelöst, in welchem Sie die Maustaste abfragen, um so entsprechend reagieren zu können.
Ja, ja, wir hatten ja schon einmal solch einen Code im Archiv. Korrekt! Aber dieser Code unterscheidet sich von dem bereits bekannten Tipp ( Icon Ihrer Anwendung im SystemTray) dadurch, dass man keine extra Picture-Box mit einem Symbol zur Verfuegung stellen muss.
Hier der Code:
Erstellen Sie ein neues Modul mit nachfolgenden Deklarationen.
Option Explicit ' alle benötigten API-Deklarationen Public Declare Sub keybd_event Lib "user32" ( _ ByVal bVk As Byte, _ ByVal bScan As Byte, _ ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long) Public Const KEYEVENTF_KEYUP = &H2 Public Const VK_LWIN = &H5B 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 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 ' Konstanten für linke Maustaste Public Const WM_LBUTTONDBLCLK = &H203 ' Doppelklick Public Const WM_LBUTTONDOWN = &H201 ' Maus gedrückt Public Const WM_LBUTTONUP = &H202 ' Maus losgelassen ' Konstanten für rechte Maustaste Public Const WM_RBUTTONDBLCLK = &H206 ' Doppelklick Public Const WM_RBUTTONDOWN = &H204 ' Maus gedrückt Public Const WM_RBUTTONUP = &H205 ' Maus losgelassen Public Declare Function Shell_NotifyIcon Lib "shell32" _ Alias "Shell_NotifyIconA" ( _ ByVal dwMessage As Long, _ pnid As NOTIFYICONDATA) As Boolean Public nid As NOTIFYICONDATA
Beispiel
Plazieren Sie auf die Form einen CommandButton und nennen diesen cmdHide. Aktivieren Sie den Menü-Editor und erstellen ein unsichtbares PopUp-Menü (MenuPopUp) mit zwei Menü-Einträgen: Wiederherstellen (mnuPopUp(0)) und Beenden (mnuPopUp(1)).
Beim Klicken auf die Schaltfläche wird Anwendung ausgeblendet und im System-Tray angezeigt:
Private Sub cmdHide_Click() ' Symbol der Anwendung zum SysTray hinzufügen 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 = Me.Caption & vbNullChar End With Shell_NotifyIcon NIM_ADD, nid ' Anwendung jetzt "verstecken" Me.Hide End Sub
Alle Maus-Ereignisse werden nun an die Form weitergeleitet und können im Form_MouseMove-Ereignis abgefragt werden:
Private Sub Form_MouseMove(Button As Integer, _ Shift As Integer, X As Single, Y As Single) ' Das MouseMove Ereignis wird ausgelöst, wenn die ' Maus über das Symbol im Systray geführt wird Dim lMsg As Long Dim sFilter As String lMsg = X / Screen.TwipsPerPixelX Select Case lMsg Case WM_LBUTTONDOWN ' linke Maustaste wird gedrückt Case WM_LBUTTONUP ' linke Maustaste wird losgelassen Case WM_LBUTTONDBLCLK ' linke Maustaste - Doppelklick Case WM_RBUTTONDOWN ' rechte Maustaste wird gedrückt Case WM_RBUTTONUP ' rechte Maustaste wird losgelassen ' (jetzt z.B. Popup-Menü öffnen) PopupMenu MenuPopUp Case WM_RBUTTONDBLCLK ' rechte Maustaste - Doppeklick End Select End Sub
Beim Klicken auf einen Menü-Eintrag aus dem PopUp-Menü muss der entsprechende Code ausgeführt werden:
Private Sub mnuPopUp_Click(Index As Integer) ' Symbol aus dem Systray entfernen Shell_NotifyIcon NIM_DELETE, nid Select Case Index Case 0 ' Wiederherstellen Me.Show Case 1 ' Beenden End End Select End Sub
Wird das Programm beendet, muss noch das Icon aus dem System-Tray entfernt (falls dort noch vorhanden):
Private Sub Form_Unload(Cancel As Integer) ' Symbol aus dem Systray entfernen, ' wenn das Programm beended wird Shell_NotifyIcon NIM_DELETE, nid End Sub
Siehe auch: sevTrayIcon ActiveX
Standard-Icon, Flash- oder animierte Icons
Mit dieser Komponente bringen Sie Ihre Anwendung als Icon in den Traybereich der Windows Taskbar (rechts neben der Uhr) - entweder als Standard-Symbol, Flash-Symbol (blinkend) oder auch animiert...
Weiter Infos im Downloadbereich...