Avatar billede fireit Nybegynder
04. december 2002 - 21:03 Der er 8 kommentarer

Systray

Hej

I ved sikkert alle hvad et systray ikon er. Det jeg ønsker, er ikke at lave et ikon i systrayen, men at aktivere et program, som er minimeret til systray - f.eks. ICQ som har den grønne blomst, og når du dobbeltklikker på ikonet, viser ICQ sig.

Jeg håber i har nogen forslag....

I øvrigt, hvis I ved hvordan man kan se om en process / hwnd er en hwnd som ligger i systray, vil jeg også gerne vide det.
Avatar billede tubber Juniormester
04. december 2002 - 22:05 #1
Du putter følgende kode ind i din form kode:

'Kode for at fortælle hvornår programmet er
'minimeret
Private Sub Form_Resize()
    If Me.ScaleHeight = 0 Then
        Me.Visible = False
    End If
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim lMsg As Long
    lMsg = X / Screen.TwipsPerPixelX
    Debug.Print lMsg
    Select Case lMsg
            Case WM_LBUTTONDBLCLICK
                'Kode til venstre dobbelt-klik
                Me.WindowState = 0
                Me.Show
            Case WM_LBUTTONDOWN
                'kode når venstre knap holdes nede
            Case WM_LBUTTONUP
                'Kode for at slippe venstre knap
            Case WM_RBUTTONDBLCLK
                'kode for højre dobbelt-klik
            Case WM_RBUTTONDOWN
                'kode når højre knap holdes nede
            Case WM_RBUTTONUP
                'Kode for at slippe venstre knap
                'Typisk til en menu men minimer, osv.
                'me.PopupMenu Indstillinger
        End Select
End Sub

Derefter laver du et modul (en .bas fil) med følgende:

Option Explicit
'Declarations and constants for at tilføje Ikoner til
'System Tray
Private 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

Private TrayIcon As NOTIFYICONDATA

Public Const WM_LBUTTONDBLCLICK = &H203
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const WM_RBUTTONDBLCLK = &H206
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONUP = &H205
Public Const WM_MOUSEMOVE = &H200
Const NIM_ADD = &H0
Const NIM_MODIFY = &H1
Const NIM_DELETE = &H2
Const NIF_MESSAGE = &H1
Const NIF_ICON = &H2
Const NIF_TIP = &H4

'API declaration der er nødvendig for at tilføje
'Ikon til System Tray
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias _
      "Shell_NotifyIconA" (ByVal dwMessage As Long, _
          pnid As NOTIFYICONDATA) As Boolean

Public Sub AddIcon(frm As Form, Optional sTip As String)
    'Sub til at tilføje Ikonet til
    'System Tray når programmet minimeres
    With TrayIcon
        .cbSize = Len(TrayIcon)
        .hwnd = frm.hwnd
        .uId = vbNull
        .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
        .ucallbackMessage = WM_MOUSEMOVE
        .hIcon = frm.Icon
        'Teksten der kommer når musen er over Ikonet
        If sTip = "" Then
            .szTip = frm.Caption & vbNullChar
        Else
            .szTip = sTip & vbNullChar
        End If
    End With
    'Tilføjer Ikonet
    Call Shell_NotifyIcon(NIM_ADD, TrayIcon)
    'Skjuler formen
    'frm.Hide
End Sub

Public Sub RemoveIcon(frm As Form)
    'Sub til at fjerne Ikonet fra
    'System Tray når programmet lukkes
    With TrayIcon
        .cbSize = Len(TrayIcon)
        .hwnd = frm.hwnd
        .uId = vbNull
    End With
    'Fjerne Ikonet
    Call Shell_NotifyIcon(NIM_DELETE, TrayIcon)
End Sub


Og så er der 2 kald:

Call AddIcon 'for at tilføje ikonet nede i hjørnet
Call RemoveIcon 'for at fjerne det igen

/Tubber
Avatar billede tubber Juniormester
04. december 2002 - 22:13 #2
Det andet skulle være et svar :O)

Den med om man kan chekke om et andet prog ligger der ved jeg ikke....eller er det dit prog du vil chekke om det er der nede eller ??
Avatar billede fireit Nybegynder
05. december 2002 - 11:19 #3
Hej Tubber
Nej det er et andet program, f.eks. ICQ, MSN - alle programmer som ligger i systray.

Hvis du havde læst spørgsmålet ordenligt havde du også set
"Det jeg ønsker, er ikke at lave et ikon i systrayen".
Avatar billede tubber Juniormester
05. december 2002 - 11:32 #4
Ahhh sorry var lidt træt i nat :O)
Avatar billede tubber Juniormester
05. december 2002 - 12:07 #5
Men om ikke andet kan du måske se noget i koden du kan bruge ?
Avatar billede m0nk3y Nybegynder
18. juni 2003 - 19:08 #6
Hvorfor siger den forkert ved denne linie ???
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
Avatar billede m0nk3y Nybegynder
10. marts 2004 - 16:00 #7
Lukker
Avatar billede m0nk3y Nybegynder
10. marts 2004 - 16:00 #8
hov, det var sq da ikke mit spm :/
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester