Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24

Discussione: [VB6] Icone nella Tray

  1. #1

    [VB6] Icone nella Tray

    ciao ragazzi, vi pongo una domanda un po' strana... penso che tutti oramai hanno scoperto che se un programma possiede un icona nella tray e viene chiuso il processo dal task, quest'ultima nn va via finchè nn si passa sopra il mouse.

    C'è modo tramite un API o qlc altro trucchetto di farla andare via in automatico?

  2. #2
    Utente di HTML.it L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,755
    se c'è è sconosciuta ai più perchè è un problema che riscontro spesso
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

  3. #3
    È ovvio che se il programma viene terminato forzatamente non può chiamare la API che rimuove l'icona nella tray... ma tu cosa vuoi fare?
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Gia' ... mi sta venendo un dubbio (piu' che altro una curiosita' ...) ...

    ... ma a cosa ti serve?

  5. #5
    @oregon a pensar male si fa peccato

    @matpez

    non è sicuramente la soluzione migliore però crea le condizioni di un refresh

    codice:
    Private Const WM_MOUSEMOVE = &H200
    
    Private Type OSVERSIONINFO
        dwOSVersionInfoSize As Long
        dwMajorVersion As Long
        dwMinorVersion As Long
        dwBuildNumber As Long
        dwPlatformId As Long
        szCSDVersion As String * 128
    End Type
    
    Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
    End Type
    
    Private Declare Function GetVersionEx Lib "kernel32" Alias _
        "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
    Private Declare Function FindWindowEx Lib "user32" Alias _
        "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, _
        ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
    Private Declare Function GetWindowRect Lib "user32" ( _
        ByVal hwnd As Long, lpRect As RECT) As Long
    Private Declare Function PostMessage Lib "user32" Alias _
        "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
        ByVal wParam As Long, ByVal lParam As Long) As Long
    
    Private Sub RefreshTray()
        Dim osv As OSVERSIONINFO
        Dim hwnd As Long
        Dim r As RECT
        Dim x As Long
    
        osv.dwOSVersionInfoSize = Len(osv)
        Call GetVersionEx(osv)
    
        Select Case (osv.dwMajorVersion * 10) + osv.dwMinorVersion
            Case 50
                hwnd = FindWindowEx(FindWindowEx(FindWindowEx(0, 0, _
                    "Shell_TrayWnd", ""), 0, "TrayNotifyWnd", ""), 0, _
                    "ToolbarWindow32", "")
            Case 51, 52
                hwnd = FindWindowEx(FindWindowEx(FindWindowEx( _
                    FindWindowEx(0, 0, "Shell_TrayWnd", ""), 0, _
                    "TrayNotifyWnd", ""), 0, "SysPager", ""), 0, _
                    "ToolbarWindow32", "Notification Area")
            Case Else ' altri OS Bho!
                Exit Sub
        End Select
    
        Call GetWindowRect(hwnd, r)
        For x = r.Left To r.Right
            Call PostMessage(hwnd, WM_MOUSEMOVE, 0, _
                ((r.Bottom - r.Top) \ 2) * &HFFFF + x - r.Left)
        Next
    End Sub
    per richiamarla

    codice:
        Call RefreshTray
    in pratica ho simulato il passaggio del mause sopra la tray
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da xegallo
    @oregon a pensar male si fa peccato
    ... ma molto spesso ci si azzecca (devi scriverla completa, altrimenti Andreotti si offende ...)

  7. #7
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    In effetti, anche chiudendo normalmente il programma, a volte l'icona rimane evidenziata nella tray sino al passaggio sopra di essa del cursore del mouse. Proverò la soluzione suggerita da xegallo.
    A proposito xegallo, ben tornato è tempo che non ti leggo !
    LM

  8. #8
    Originariamente inviato da LMondi

    A proposito xegallo, ben tornato è tempo che non ti leggo !
    eh programmo poco
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  9. #9
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Funziona perfettamente. Soluzione semplice e funzionale, che toglie l'inconveniente antiestetico del permanere dell'icona, complimenti a xegallo.
    LM

  10. #10
    Già, è la prima "soluzione" che ho pensato anche io... nn l'avevo ancora scritta, ti ringrazio del codice così lo posso anche studiare!!

    Non credo che ci sia altra soluzioni, perchè cmq anche la microsoft nn fa mai refresh nella tray, tanto che l'icona rimane sempre!!

    Ora vi spiego perchè mi serve... ho un programma fatto da me che monitora alcuni altri processi che se vanno in errore devono assolutamente essere riaperti in automatico. Questi processi sono 24 su 24 ore a girare e quindi darebbero fastidio nella barra delle applicazioni... qundi una bella tray nn guasta mai!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.