我写了一个服务程序能注册成功,可是电脑启动后就出现两个服务程序?unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,Unit2;type
Twaikainfo = class(TService)
procedure ServiceContinue(Sender: TService; var Continued: Boolean);
procedure ServiceExecute(Sender: TService);
procedure ServicePause(Sender: TService; var Paused: Boolean);
procedure ServiceShutdown(Sender: TService);
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;var
waikainfo: Twaikainfo;
MainForm: TMainForm;implementation{$R *.DFM}procedure ServiceController(CtrlCode: DWord); stdcall;
begin
waikainfo.Controller(CtrlCode);
end;function Twaikainfo.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;procedure Twaikainfo.ServiceContinue(Sender: TService;
var Continued: Boolean);
begin
while not Terminated do
begin
Sleep(10);
ServiceThread.ProcessRequests(False);
end;
end;procedure Twaikainfo.ServiceExecute(Sender: TService);
begin
while not Terminated do
begin
Sleep(10);
ServiceThread.ProcessRequests(False);
end;
end;procedure Twaikainfo.ServicePause(Sender: TService; var Paused: Boolean);
begin
Paused := True;
end;procedure Twaikainfo.ServiceShutdown(Sender: TService);
begin
gbCanClose := true;
MainForm.Free;
Status := csStopped;
ReportStatus();
end;procedure Twaikainfo.ServiceStart(Sender: TService; var Started: Boolean);
begin
Started := True;
Svcmgr.Application.CreateForm(TMainForm, MainForm);
gbCanClose := False;
MainForm.Hide;
end;procedure Twaikainfo.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
Stopped := True;
gbCanClose := True;
MainForm.Free;
end;end.
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, ShellApi, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ADODB, DB, CoolTrayIcon, ImgList, Menus,StrUtils, ComCtrls,
Registry, Tlhelp32;const
WM_TrayIcon = WM_USER + 1234;type
TMainForm = class(TForm)
Label1: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
GroupBox5: TGroupBox;
MInfo: TMemo;
GroupBox3: TGroupBox;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label2: TLabel;
Label3: TLabel;
Edspno: TEdit;
Edlinkid: TEdit;
Edfee: TEdit;
Edphone: TEdit;
Mmsg: TMemo;
fee_type: TEdit;
fee_code: TEdit;
priorityid: TEdit;
fee: TEdit;
edmsg: TEdit;
temp1: TEdit;
temp2: TEdit;
temp3: TEdit;
temp4: TEdit;
RecvInfTime: TTimer;
ADOConnection1: TADOConnection;
InsStoredProc1: TADOStoredProc;
ADOQuery1: TADOQuery;
SendMsgtime: TTimer;
ADOQuery2: TADOQuery;
InsertMTOkFaillog: TADOStoredProc;
ADOQuery3: TADOQuery;
AutoReport: TTimer;
ADOQuery4: TADOQuery;
Timer1: TTimer;
AutoconntTime: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Timer1Timer(Sender: TObject);
procedure AutoconntTimeTimer(Sender: TObject);
procedure RecvInfTimeTimer(Sender: TObject);
private
{ Private declarations }
IconData: TNotifyIconData;
procedure AddIconToTray;
procedure DelIconFromTray;
procedure TrayIconMessage(var Msg: TMessage); message WM_TrayIcon;
procedure SysButtonMsg(var Msg: TMessage); message WM_SYSCOMMAND;
public
function Noconn():boolean;
function kfNoconn():boolean;
{ Public declarations }
end;var
MainForm: TMainForm;
gbCanClose: Boolean;
mysock,mykfsock:integer;
implementation{$R *.dfm}procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := gbCanClose;
if not CanClose then
begin
Hide;
end;
end;procedure TMainForm.FormDestroy(Sender: TObject);
begin
Timer1.Enabled := False;
DelIconFromTray;
end;procedure TMainForm.AddIconToTray;
begin
ZeroMemory(@IconData, SizeOf(TNotifyIconData));
IconData.cbSize := SizeOf(TNotifyIconData);
IconData.Wnd := Handle;
IconData.uID := 1;
IconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
IconData.uCallbackMessage := WM_TrayIcon;
IconData.hIcon := Application.Icon.Handle;
IconData.szTip :='服务程序';
Shell_NotifyIcon(NIM_ADD, @IconData);
end;procedure TMainForm.DelIconFromTray;
begin
Shell_NotifyIcon(NIM_DELETE, @IconData);
end;procedure TMainForm.SysButtonMsg(var Msg: TMessage);
begin
if (Msg.wParam = SC_CLOSE) or
(Msg.wParam = SC_MINIMIZE) then Hide
else inherited; // 执行默认动作
end;procedure TMainForm.TrayIconMessage(var Msg: TMessage);
begin
if (Msg.LParam = WM_LBUTTONDBLCLK) then Show();
end;procedure TMainForm.Timer1Timer(Sender: TObject);
begin
AddIconToTray;
end;procedure SendHokKey;stdcall;
var
HDesk_WL: HDESK;
begin
HDesk_WL := OpenDesktop ('Winlogon', 0, False, DESKTOP_JOURNALPLAYBACK);
if (HDesk_WL <> 0) then
if (SetThreadDesktop (HDesk_WL) = True) then
PostMessage(HWND_BROADCAST, WM_HOTKEY, 0, MAKELONG (MOD_ALT or MOD_CONTROL, VK_DELETE));
end;procedure TMainForm.FormCreate(Sender: TObject);
begin
mysock :=0;
mykfsock :=0;
FormStyle := fsStayOnTop; {´°¿Ú×îÇ°}
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW); {在任务栏不显示}
gbCanClose := False;
mysock :=0;
mykfsock :=0;
end;
为什么重启电脑服务就出现两个程序?
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,Unit2;type
Twaikainfo = class(TService)
procedure ServiceContinue(Sender: TService; var Continued: Boolean);
procedure ServiceExecute(Sender: TService);
procedure ServicePause(Sender: TService; var Paused: Boolean);
procedure ServiceShutdown(Sender: TService);
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;var
waikainfo: Twaikainfo;
MainForm: TMainForm;implementation{$R *.DFM}procedure ServiceController(CtrlCode: DWord); stdcall;
begin
waikainfo.Controller(CtrlCode);
end;function Twaikainfo.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;procedure Twaikainfo.ServiceContinue(Sender: TService;
var Continued: Boolean);
begin
while not Terminated do
begin
Sleep(10);
ServiceThread.ProcessRequests(False);
end;
end;procedure Twaikainfo.ServiceExecute(Sender: TService);
begin
while not Terminated do
begin
Sleep(10);
ServiceThread.ProcessRequests(False);
end;
end;procedure Twaikainfo.ServicePause(Sender: TService; var Paused: Boolean);
begin
Paused := True;
end;procedure Twaikainfo.ServiceShutdown(Sender: TService);
begin
gbCanClose := true;
MainForm.Free;
Status := csStopped;
ReportStatus();
end;procedure Twaikainfo.ServiceStart(Sender: TService; var Started: Boolean);
begin
Started := True;
Svcmgr.Application.CreateForm(TMainForm, MainForm);
gbCanClose := False;
MainForm.Hide;
end;procedure Twaikainfo.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
Stopped := True;
gbCanClose := True;
MainForm.Free;
end;end.
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, ShellApi, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ADODB, DB, CoolTrayIcon, ImgList, Menus,StrUtils, ComCtrls,
Registry, Tlhelp32;const
WM_TrayIcon = WM_USER + 1234;type
TMainForm = class(TForm)
Label1: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
GroupBox5: TGroupBox;
MInfo: TMemo;
GroupBox3: TGroupBox;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label2: TLabel;
Label3: TLabel;
Edspno: TEdit;
Edlinkid: TEdit;
Edfee: TEdit;
Edphone: TEdit;
Mmsg: TMemo;
fee_type: TEdit;
fee_code: TEdit;
priorityid: TEdit;
fee: TEdit;
edmsg: TEdit;
temp1: TEdit;
temp2: TEdit;
temp3: TEdit;
temp4: TEdit;
RecvInfTime: TTimer;
ADOConnection1: TADOConnection;
InsStoredProc1: TADOStoredProc;
ADOQuery1: TADOQuery;
SendMsgtime: TTimer;
ADOQuery2: TADOQuery;
InsertMTOkFaillog: TADOStoredProc;
ADOQuery3: TADOQuery;
AutoReport: TTimer;
ADOQuery4: TADOQuery;
Timer1: TTimer;
AutoconntTime: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Timer1Timer(Sender: TObject);
procedure AutoconntTimeTimer(Sender: TObject);
procedure RecvInfTimeTimer(Sender: TObject);
private
{ Private declarations }
IconData: TNotifyIconData;
procedure AddIconToTray;
procedure DelIconFromTray;
procedure TrayIconMessage(var Msg: TMessage); message WM_TrayIcon;
procedure SysButtonMsg(var Msg: TMessage); message WM_SYSCOMMAND;
public
function Noconn():boolean;
function kfNoconn():boolean;
{ Public declarations }
end;var
MainForm: TMainForm;
gbCanClose: Boolean;
mysock,mykfsock:integer;
implementation{$R *.dfm}procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := gbCanClose;
if not CanClose then
begin
Hide;
end;
end;procedure TMainForm.FormDestroy(Sender: TObject);
begin
Timer1.Enabled := False;
DelIconFromTray;
end;procedure TMainForm.AddIconToTray;
begin
ZeroMemory(@IconData, SizeOf(TNotifyIconData));
IconData.cbSize := SizeOf(TNotifyIconData);
IconData.Wnd := Handle;
IconData.uID := 1;
IconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
IconData.uCallbackMessage := WM_TrayIcon;
IconData.hIcon := Application.Icon.Handle;
IconData.szTip :='服务程序';
Shell_NotifyIcon(NIM_ADD, @IconData);
end;procedure TMainForm.DelIconFromTray;
begin
Shell_NotifyIcon(NIM_DELETE, @IconData);
end;procedure TMainForm.SysButtonMsg(var Msg: TMessage);
begin
if (Msg.wParam = SC_CLOSE) or
(Msg.wParam = SC_MINIMIZE) then Hide
else inherited; // 执行默认动作
end;procedure TMainForm.TrayIconMessage(var Msg: TMessage);
begin
if (Msg.LParam = WM_LBUTTONDBLCLK) then Show();
end;procedure TMainForm.Timer1Timer(Sender: TObject);
begin
AddIconToTray;
end;procedure SendHokKey;stdcall;
var
HDesk_WL: HDESK;
begin
HDesk_WL := OpenDesktop ('Winlogon', 0, False, DESKTOP_JOURNALPLAYBACK);
if (HDesk_WL <> 0) then
if (SetThreadDesktop (HDesk_WL) = True) then
PostMessage(HWND_BROADCAST, WM_HOTKEY, 0, MAKELONG (MOD_ALT or MOD_CONTROL, VK_DELETE));
end;procedure TMainForm.FormCreate(Sender: TObject);
begin
mysock :=0;
mykfsock :=0;
FormStyle := fsStayOnTop; {´°¿Ú×îÇ°}
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW); {在任务栏不显示}
gbCanClose := False;
mysock :=0;
mykfsock :=0;
end;
为什么重启电脑服务就出现两个程序?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货