¿Como obtener los iconos de la bandeja de sistema? Leido 12.348 veces

 
  Kni
Pregunta ofrece:
1 estrellas
Pues eso.
Estoy intentando hacer un shell tipo Windows Explorer y obtener los iconos de la bandeja del sistema no me parece muy fácil.
Atentos, no quiero crear un icono con NotifyIcon ni nada eso. Quiero obtener los iconos abiertos por programas (antivirus, msn, dropbox...) y gestionarlos desde mi programa.
Busco pues un método, evento o llamada, esté por defecto en VB/.NET/CIL o bien sea una llamada a la API de Windows u otra DLL, que permita obtener al menos una colección de NotifyIcon correspondientes a los iconos del sistema, no solo a los creados por mi aplicación.
Hay algun programador que tenga idea de eso?

 

 





  Broco
Es tarde, pero es que acabo de ver el mensaje...

Con esta función recibes el icono..



Public Shared Function GetWindowIcon(ByVal WindowHandle As IntPtr) As Icon
Dim IconHandle As IntPtr = SendMessage(WindowHandle, WM_GETICON, 0, 0)
If Not IconHandle = IntPtr.Zero Then
Return Icon.FromHandle(IconHandle)
Else
Return Nothing
End If
End Function


Puedes usar el API FindWindow aun que sí ya sacas las ventanas abiertas dudo que lo necesites...

Ejemplo



Imports System.Runtime.InteropServices

Public Class Form1

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer

<DllImportAttribute("user32.dll", EntryPoint:="SendMessageW")> _
Public Shared Function SendMessage(<InAttribute()> ByVal hWnd As System.IntPtr, ByVal Msg As UInteger, ByVal wParam As UInteger, ByVal lParam As Integer) As IntPtr
End Function

Public Const WM_GETICON As UInteger = &H7F

Public Shared Function GetWindowIcon(ByVal WindowHandle As IntPtr) As Icon
Dim IconHandle As IntPtr = SendMessage(WindowHandle, WM_GETICON, 0, 0)
If Not IconHandle = IntPtr.Zero Then
Return Icon.FromHandle(IconHandle)
Else
Return Nothing
End If
End Function

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Icon = GetWindowIcon(CType(FindWindow("Photoshop", vbNullString), IntPtr))
End Sub
End Class


 

 


  Kni
No, yo me refería a los iconos del systray: antivirus, volumen, MSN...
 

 





    ¿Cuantas columnas?     | 2 columnas | 3 columnas | 4 columnas | 5 columnas | 6 columnas |  
    Escribe la dirección web de la imagen:
  Publica tu respuesta  |  Haz Click en el siguiente cuadro para escribir