window服务的问题(50分)

  • 主题发起人 主题发起人 byronhu
  • 开始时间 开始时间
B

byronhu

Unregistered / Unconfirmed
GUEST, unregistred user!
windows服务程序里面 不能有form么?<br>我现在要实现的功能是做一个后台的服务程序监查数据消息,有变化的话,我就弹出一个消息框,这样的话,岂不是不能做成服务
 
我记得网上有个windows服务 系统托盘的例子,你不妨看看
 
可以有Form的,另建一个窗口,从服务主程序中调用<br>比如我的例子:<br>unit MyPowerKey;<br>interface<br>uses<br> &nbsp;Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;<br><br>type<br> &nbsp;TPower_Key = class(TService)<br> &nbsp; &nbsp;procedure ServiceCreate(Sender: TObject);<br> &nbsp;private<br> &nbsp; &nbsp;{ Private declarations }<br> &nbsp;public<br> &nbsp; &nbsp;function GetServiceController: TServiceController; override;<br> &nbsp; &nbsp;procedure WMPowerBroadCast(var msg : TMessage);message WM_POWERBROADCAST;//键盘Power键或系统关机的广播消息<br> &nbsp; &nbsp;{ Public declarations }<br> &nbsp;end;<br><br>var<br> &nbsp;Power_Key: TPower_Key;<br><br>implementation<br>uses MsgBox;<br>{$R *.DFM}<br><br>procedure TPower_Key.WMPowerBroadCast(var msg: TMessage);<br>var Form_MsgBox : TForm_MsgBox;<br>begin<br> &nbsp;//SetForeGroundWindow(Application.MainForm.Handle);//在应用程序里指定主窗口前置,可获取按键消息,服务没有窗口,所以就屏蔽这行了<br> &nbsp;Form_MsgBox := TForm_MsgBox.Create(nil);//自定义提示窗口<br> &nbsp;try<br> &nbsp; &nbsp;Form_MsgBox.suiForm1.Caption := '提醒框';<br> &nbsp; &nbsp;Form_MsgBox.HintsLabel.Caption := '确认是否关闭系统?';<br> &nbsp; &nbsp;if Form_MsgBox.ShowModal &lt;&gt; mrOK then<br> &nbsp; &nbsp; &nbsp;msg.Result := BROADCAST_QUERY_DENY;//修改消息值,使不关机<br> &nbsp;finally<br> &nbsp; &nbsp;FreeAndNil(Form_MsgBox);<br> &nbsp;end;<br>end;<br><br>procedure ServiceController(CtrlCode: DWord); stdcall;<br>begin<br> &nbsp;Power_Key.Controller(CtrlCode);<br>end;<br><br>function TPower_Key.GetServiceController: TServiceController;<br>begin<br> &nbsp;Result := ServiceController;<br>end;<br><br>procedure TPower_Key.ServiceCreate(Sender: TObject);<br>begin<br> &nbsp;Self.Interactive := true;<br>end;<br>end.
 
可以有窗口的,服务应该注册为与桌面互交.
 
是可以窗体,但是服务一般是允许后台程序,最好不要进行过多的用户交互,以免无人干预导致服务无法运行。
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2893430
 
后退
顶部