CLR: .Net / Mono / Boo / Otros CLR > C#

 APIS con C#

(1/2) > >>

cob1979:
Amigos, hace días me estoy rompiendo la cabeza, pues he querido hacer un servicio que interactue con la bandeja del sistema (o Area de notificaciones). EL mismo trabajará con las API de windows para lograr lo antes mencionado.

Hice una clase como dicen los libros con métodos estáticos.

internal static class NativeMethods
        {
            // Lot of API's definitions
 
            [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

           ........................................
       }
Este es el primer método, por supuesto hay más pero ya aquí no trabaja, pues debe devolverme el manipulador de la ventana

Después invoco los métodos::

 IntPtr hwndParent = NativeMethods.FindWindow("Shell_TrayWnd", null);

y cuando depuro, me dice que hwndParent = 0;
Lo cual no debe ser así...

Este mismo código lo comprobé con un proyecto formulario de Windows y hasta un proyecto simple, y todo me trabaja de maravillas, pero no sé por qué con un servicio no. Quizás los servicios necesiten otro código adicional, o no se pueda trabajar con la bandeja del sistema.

Por favor si tienen alguna sugerencia se los agradeceré.  :argh:  :argh:

Jeysscarr:
:blink: !!!!!!!!! No te queda mas sencillo si en vez de apis usas la clase NotifyIcon?????????????????????????

cob1979:

--- Cita de: "Jeysscarr" ---:blink: !!!!!!!!! No te queda mas sencillo si en vez de apis usas la clase NotifyIcon?????????????????????????
--- Fin de la cita ---

Para serte sincero miré la clase NotifyIcon por arriba y me pareció que lo más que me permitía era agregar un ícono de la aplicación a la bandeja, y ya te digo no la profundicé mucho.

Pero lo que quisiera es que el servicio manipulara todos los íconos alojados en dicha bandeja del sistema (de todos los programas). Muchas gracias y veré si la clase NotifyIcon me brinda hasta donde quiero llegar.

Jeysscarr:
por otro lado si es estrictamente necesario usar el API trata con algo como esto:
Un ejemplo para obtener la ventana del block de notas


--- Código: C# ---using System.Diagnostics;Process[] processes = Process.GetProcessesByName("notepad"); foreach (Process p in processes){    IntPtr pFoundWindow = p.MainWindowHandle;} 
para cerrarla...:p.CloseMainWindow();

cob1979:

--- Cita de: "Jeysscarr" ---por otro lado si es estrictamente necesario usar el API trata con algo como esto:
Un ejemplo para obtener la ventana del block de notas


--- Código: C# ---using System.Diagnostics;Process[] processes = Process.GetProcessesByName("notepad"); foreach (Process p in processes){    IntPtr pFoundWindow = p.MainWindowHandle;} 
para cerrarla...:p.CloseMainWindow();
--- Fin de la cita ---


Ok, gracias  :)  :)  y veré que hago. Si me dan otras sugerencias les agradecería....

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa