Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-05-2006
SYWARE SYWARE is offline
Registrado
 
Registrado: sep 2005
Posts: 7
Poder: 0
SYWARE Va por buen camino
Cómo eliminar un icono del systray de una aplicación de terceros

Agradeceré cualquier sugerencia sobre el siguiente tema:
Hay un programa de terceros que se sitúa automáticamente en el systray al iniciarse.
Este programa lo iniciamos y lo finalizamos desde un programa delphi.
El problema viene en que aunque matemos el proceso el icono permanece en el systray.
Si volvemos a iniciar el programa de terceros, aparece un segundo icono y así sucesivamente.
Al pasar el puntero del ratón por encima, desaparece.
El temas es que el programa delphi está activa las 24 horas del día los 365 días del año y que durante su ejecución puede iniciar y finalizar este programa de terceros 10 o 12 veces en un día. Al cabo de una semana tenemos más de 70 iconos .... al cabo de un año ... ni te cuento
Necesitaría eliminar el icono del SYSTRAY teniendo en cuenta que únicamente conozco el nombre del proceso.
Responder Con Cita
  #2  
Antiguo 22-05-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.281
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Cómo cerraís ese programa?
Ese problema suele venir propiciado porque al cerrar un programa no se ejecuta el código que elimina el icono; Al pasar el ratón por encima se "repinta" la barra y desaparece.

¿Cómo estáis cerrando el programa?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 22-05-2006
SYWARE SYWARE is offline
Registrado
 
Registrado: sep 2005
Posts: 7
Poder: 0
SYWARE Va por buen camino
Cerramos el proceso así

function Matar_proceso(ExeFileName: string): Integer;
// uses TlHelp32
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
Result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
while Integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName))
or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then
Result := Integer(TerminateProcess(
OpenProcess(PROCESS_TERMINATE,
BOOL(0),
FProcessEntry32.th32ProcessID),
0));
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;

Última edición por SYWARE fecha: 22-05-2006 a las 13:31:05.
Responder Con Cita
  #4  
Antiguo 22-05-2006
SYWARE SYWARE is offline
Registrado
 
Registrado: sep 2005
Posts: 7
Poder: 0
SYWARE Va por buen camino
Nota

Cuando terminamos este mismo proceso desde el administrador de tareas de Windows, ocurre exactamente lo mismo.
Responder Con Cita
  #5  
Antiguo 22-05-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.281
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Por favor utiliza TAG's cuando añadas código en tus mensajes.
De paso puedes revisar la Guía de estilo, para próximos post.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 22-05-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.281
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Una pregunta, ¿Si el programa se cierra manualmente, el icono desaparece?
Me da la impresión de que tal vez al cerrar la aplicación de esa forma no se esté cerrando correctamente y se estén dejando de realizar determinadas cosas.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 22-05-2006
SYWARE SYWARE is offline
Registrado
 
Registrado: sep 2005
Posts: 7
Poder: 0
SYWARE Va por buen camino
Cuando cerramos el programa de forma manual, el icono sí que desaparece.
Está claro que el programa se está encargando de eliminarlo del systray.
Para eliminarlo con el shell_notifyIcon precisaría conocer los parámetros para eliminarlo, especialmente el handle.

Código Delphi [-]
 
Procedure TForm1.QuitarIconos;
var 
  Info: TNotifyIconData;
begin
  Info.cbSize := SizeOf(Info);
  Info.Wnd    := Handle;
  Info.uID    := 1;
  Shell_NotifyIcon(NIM_DELETE,@Info);
End;

Si hubiese una manera de recorrerse todos los tray icon del systray e irlos comprobando por su nombre y obtener el handle para poder eliminarlo, estaría bien, pero seguramente hay algún método más sencillo.
Responder Con Cita
  #8  
Antiguo 22-05-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.281
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Puedes acceder a esa ventana con lo siguiente.
La barra de Inicio es la Ventana "Shell_TrayWnd", dentro de esa encontrarás otra de la clase "TrayNotifyWnd" y dentro de esta encontrarás otras dos:
* ToolbarWindow32: Correspondiente a los iconos que hay en el Tray.
* TrayClockWClass: Correspondiente al reloj.

Una vez que tienes al handle de esa ventana (FindWindows) prueba a recorrerla, repintarla,...
Ya nos dirás si tienes éxito.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 22-05-2006
SYWARE SYWARE is offline
Registrado
 
Registrado: sep 2005
Posts: 7
Poder: 0
SYWARE Va por buen camino
Lo probaré y os diré algo,

Gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Mostrar en el systray kloud C++ Builder 1 09-02-2006 20:24:27
Icono de la aplicación SoulSoldier C++ Builder 2 06-02-2006 16:29:58
Eliminar Icono en W2k edgusano Windows 3 11-03-2005 15:20:00
Como almacenar el Nombre en un fichero de Terceros apicito Conexión con bases de datos 4 23-01-2004 13:32:47
Icono aplicacion bandeja del sistema Azor69 Varios 3 22-07-2003 09:13:24


La franja horaria es GMT +2. Ahora son las 11:29:22.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi