系统服务程序注销后托盘被删除了(100)

  • 主题发起人 主题发起人 zlibo
  • 开始时间 开始时间
Z

zlibo

Unregistered / Unconfirmed
GUEST, unregistred user!
系统服务程序在系统注销后托盘被删除了,但进程还在,程序也可以用,应该怎么解决这个问题,使系统注销后不会删除托盘?我添加托盘的代码是在窗体创建后,窗体创建是在服务的OnStart事件里,也就是说服务启动后,创建窗体,添加托盘,服务停止则删除托盘,是不是哪里不对,有经验的请赐教,感激,在线等,解决问题立刻给分
 
自己顶一下~
 
Explorer如果发生重启,也就是楼主说的注销又登入的情况,如果你的程序不重新Shell_NotifyIcon的话,图标是不会在系统托盘栏恢复的。而Explorer重启时,会广播一'TaskbarCreated'消息给各个应用程序,楼主只要在自己的程序里处理这个消息,重新插入图标,就行了。const SCnCreateTaskBar: string = 'TaskbarCreated'; WM_CNCREATETASKBAR := RegisterWindowMessage(PChar(SCnCreateTaskBar));更具体的可参考CnPack组件包中的cnpack/Source/NonVisual/CnTrayIcon.pas
 
Passion,在吗,可不可以加我QQ:83433430
 
能再详细一点吗?
 
有人说话么?
 
var WM_TASKRESTART : Cardinal; type tform1=class(Tform) private protected procedure WndProc(var Message: TMessage); override; public end;implementationprocedure Tform1.WndProc(var Message: TMessage); begin inherited; //Explorer重启时重建托盘 if Message.Msg = WM_TASKRESTART then begin ReCreateTray(Handle);// 重建托盘的函数 自己定义 end;end;initialization WM_TASKRESTART := RegisterWindowMessage('TaskbarCreated');
 
后退
顶部