none
Obtener el nombre de las aplicaciones en el system tray. RRS feed

  • Pregunta

  • Hola,

    Querría saber primero si es posible, y segundo cómo, obtener los nombres de las aplicaciones minimizadas que aparecen en el system tray. El caso es que lo que pretendo es mantener un registro de todas las aplicaciones abiertas, asumiendo que los nombres de los procesos pueden cambiar pero el de los títulosde las ventanas no (si no se recompilan, claro).

    Se como obtener el conjunto de ventanas abiertas ya estén activas o minimizadas (vamos, las que salen listadas en Windows Task Manager->Aplications) yo a parte quiero conseguir los nombres de aquellas que aparecen en el system tray. Los nombres vienen a ser el contenido del Tool Tip que aparece cuando pones el ratón encima un segundo.

    Espero que alguien me pueda ayudar. Gracias por adelantado.

    Saludos,
    Víctor
    miércoles, 11 de julio de 2007 21:29

Todas las respuestas

  • Aquí tienes todo lo que necesitas:

     

    Definición de constantes:

     

    Code Snippet

    public static readonly int GWL_STYLE = -16;

    public static readonly ulong WS_VISIBLE = 0x10000000L;

    public static readonly ulong WS_BORDER = 0x00800000L;

    public static readonly ulong TARGETWINDOW = WS_BORDER | WS_VISIBLE;

      

    Importar declaraciones:

     

    Code Snippet

    //Gestión de ventanas Win32

    [DllImport("user32.dll")]

    public static extern int EnumWindows(EnumWindowsCallback funcionCallBack, int parametrosFuncion);

    public delegate bool EnumWindowsCallback(IntPtr manejador, int parametros);

    [DllImport("user32.dll")]

    public static extern ulong GetWindowLongA(IntPtr manejador, int indice);

    [DllImport("user32.dll")]

    public static extern void GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);

     

     

    Clase Ventana:

     

    Code Snippet

    class Ventana

    {

    public string Titulo;

    public IntPtr Manejador;

    }

     

     

    Implementación:

     

    Code Snippet

    List<Ventana> ventanas;

     

    private bool Callback(IntPtr manejador, int parametros)

    {

    //Comprobar que no se trate de la propia ventana

    //y recoger la información de la ventana en caso de

    //tener bordes y título

    if (this.Handle != manejador &&

    (GetWindowLongA(manejador, GWL_STYLE) &

    TARGETWINDOW) == TARGETWINDOW)

    {

    StringBuilder tituloVentana = new StringBuilder(100);

                   GetWindowText(manejador, tituloVentana,

    tituloVentana.Capacity);

    Ventana ventana = new Ventana();

    ventana.Manejador = manejador;

    ventana.Titulo = tituloVentana.ToString();

    ventanas.Add(ventana);

    }

    return true;

    }

     

    //Obtener lista de ventanas

    ventanas = new List<Ventana>();

    EnumWindows(Callback, 0);

     

    Está escrito en C#, espero que no te cueste adaptarlo a C++.

     

    Salud!

    miércoles, 11 de julio de 2007 21:38