解决系统托盘的关机Bug

    技术2022-05-11  80

    在制作系统托盘的时候,需要拦截和处理系统消息,来完成左右健对应的操作,比如弹出菜单,显示窗口等. 但是同时需要处理好系统关机消息. Windows系统中默认会发送WM_DESTROY 和WM_NCDESTROY消息给各个窗体(Form), 但是需要注意一个情况,就是如果没有显示出窗口,比如我们的程序随Windows启动,直接进入托盘,不显示任何窗体(Form),那么此时用户直接关机就会出现无法关机的Bug,这时就需要处理WM_QUERYENDSESSION消息,把关机消息直接发送给Application而不是Form, 然后使用     Msg.Result := CallWindowProc(OldWndProc, (Owner as TWinControl).Handle,Msg.Msg, Msg.wParam, Msg.lParam); 语句将消息传递下去. 

    最新回复(0)