昨天提到的本办法,我自己试了一下,效果还行,具体如下:<br>在form窗体中放一个timer控件,定时器间隔可以设成10ms<br>在timer事件中<br>procedure TForm1.Timer1Timer(Sender: TObject);<br>var wnd:thandle;<br>begin<br>wnd:=findwindow(nil,pchar('关闭 Windows'));<br>if wnd<>0 then sendmessage(wnd,wm_close,0,0);<br>end;<br>//当然,要在后台运行这个程序。。。<br><br>//还有一种稍微高级的方法,请往下看<br><br>关闭windows<br>windows在关闭时会向所有的应用程序发送WM_QUERYENDSESSION,在delphi中截获这个消息<br>//=====================================<br>WM_QUERYENDSESSION <br>nSource = (UINT) wParam; // source of end-session request <br>fLogOff = lParam // logoff flag <br> <br>nSource Reserved for future use. <br>fLogOff<br>Value of lParam. Indicates whether the user is logging off or shutting down the system. <br><br>//如果程序不想让windows退出,把返回值设为false(delphi中为0)<br>==============================================================<br>以下给出delphi中实现:<br>private<br> procedure wmQUERYENDSESSION(var msg:tWMQUERYENDSESSION);message WM_QUERYENDSESSION;<br><br>......<br><br>procedure wmQUERYENDSESSION(var msg:tWMQUERYENDSESSION);<br>begin<br>if 不想退出windows then msg.Result :=0<br>else msg.result:=1 //允许退出windows<br>end;<br><br>//vb中也可以实现,在VB中form有个事件时queryunload<br>Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)<br><br>if unloadmode=vbAppWindows then cancel=1 '不退出windows;如果cancel=0则允许退出windows<br><br>End Sub<br><br><br>其中unloadmode 参数值的意义:<br>vbFormControlMenu 0 用户从窗体上的“控件”菜单中选择“关闭”指令。 <br>vbFormCode 1 Unload 语句被代码调用。 <br>vbAppWindows 2 当前 Microsoft Windows 操作环境会话结束。 <br>vbAppTaskManager 3 Microsoft Windows 任务管理器正在关闭应用程序。 <br>vbFormMDIForm 4 MDI 子窗体正在关闭,因为 MDI 窗体正在关闭。 <br>vbFormOwner 5 因为窗体的所有者正在关闭,所以窗体也在关闭。 <br><br>咳,赚分真难,连n年前学的VB都搬出来:)