unit UnitServiceManager;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ScktComp, StdCtrls, Spin, umSFPack,zlib,ImageHLP,
UnitFileTransfer,Menus, ImgList, ToolWin, ComCtrls , Jpeg,
ClipBrd, UnitSharedData, shellapi,CommCtrl, UnitThumbDb, Buttons;
type
TServiceManager = class(TForm)
StatusBar1: TStatusBar;
ImageList1: TImageList;
PopupMenu1: TPopupMenu;
Refresh1: TMenuItem;
N1: TMenuItem;
Edit1: TMenuItem;
Start1: TMenuItem;
Stop1: TMenuItem;
Install1: TMenuItem;
Remove1: TMenuItem;
ListView1: TListView;
Timer1: TTimer;
procedure Refresh1Click(Sender: TObject);
procedure Start1Click(Sender: TObject);
procedure Stop1Click(Sender: TObject);
procedure Remove1Click(Sender: TObject);
procedure ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
procedure ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
procedure Edit1Click(Sender: TObject);
procedure Install1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
MainSocket: TCustomWinSocket;
NewSocket: TCustomWinSocket;
SocketData: TSocketData;
Group,Computer,User: string;
procedure ParseData(Socket: TCustomWinSocket; Data: string);
procedure SetUpConnection(Socket: TCustomWinSocket);
end;
var
ServiceManager: TServiceManager;
implementation
uses UnitEditService, UnitCreateService;
{$R *.dfm}
procedure SendData(Socket: TCustomWinSocket; Data: string);
begin
UnitSharedData.SendData(Socket,'ServiceManager|' + Data);
end;
procedure DisconnectProc(Socket: TCustomWinSocket);
var
SocketData: TSocketData;
begin
SocketData := TSocketData(Socket.Data);
TServiceManager(SocketData.Form).NewSocket := nil;
TServiceManager(SocketData.Form).Caption := TServiceManager(SocketData.Form).Caption + ' - [Offline]';
if TServiceManager(SocketData.Form).NewSocket = nil then exit;
TServiceManager(SocketData.Form).Timer1.Enabled := True;
end;
procedure TServiceManager.SetUpConnection(Socket: TCustomWinSocket);
var
SocketData: TSocketData;
Strings: TStringList;
begin
SocketData := TSocketData(Socket.Data);
SocketData.DisconnectProc := @DisconnectProc;
Timer1.Enabled := False;
Caption := Copy(Caption,1,Length(Caption) -12);
Refresh1.Click;
end;
procedure TServiceManager.ParseData(Socket: TCustomWinSocket; Data: string);
var
Command: string;
Stream: TMemoryStream;
Li: TListItem;
Tmp: string;
i: integer;
Strings: TStringList;
begin
Command := Split(Data,'|',1);
Delete(Data,1,Length(Command)+1);
if Command = 'List' then begin
Listview1.Clear;
Strings := TStringList.Create;
Strings.Text := Data;
for i := 0 to Strings.Count -1 do begin
if Split(Strings.Strings[i], '|', 1) = '' then Continue;
Li := Listview1.Items.Add;
Li.Caption := Split(Strings.Strings[i], '|', 1);
Li.SubItems.Add(Split(Strings.Strings[i], '|', 2));
if Split(Strings.Strings[i], '|', 3) = '4' then Li.SubItems.Add('Started')
else Li.SubItems.Add('Stopped');
if Split(Strings.Strings[i], '|', 4) = '2' then Li.SubItems.Add('Automatic');
if Split(Strings.Strings[i], '|', 4) = '3' then Li.SubItems.Add('Manual');
if Split(Strings.Strings[i], '|', 4) = '4' then Li.SubItems.Add('Disabled');
Li.SubItems.Add(Split(Strings.Strings[i], '|', 5));
Li.SubItems.Add(Split(Strings.Strings[i], '|', 6));
end;
Strings.Free;
Listview1.Enabled := True;
ListView1.Items[0].Selected := True;
end;
end;
procedure TServiceManager.Refresh1Click(Sender: TObject);
begin
Listview1.Enabled := False;
SendData(NewSocket,'List');
end;
procedure TServiceManager.Start1Click(Sender: TObject);
var
Number: integer;
begin
for Number := 0 to ListView1.Items.Count -1 do begin
Application.ProcessMessages;
if not listview1.Items[Number].Selected then Continue;
SendData(NewSocket,'Start|' + listview1.Items[Number].SubItems[0]);
end;
Refresh1.Click;
end;
procedure TServiceManager.Stop1Click(Sender: TObject);
var
Number: integer;
begin
for Number := 0 to ListView1.Items.Count -1 do begin
Application.ProcessMessages;
if not listview1.Items[Number].Selected then Continue;
SendData(NewSocket,'Stop|' + listview1.Items[Number].SubItems[0]);
end;
Refresh1.Click;
end;
procedure TServiceManager.Remove1Click(Sender: TObject);
var
Number: integer;
begin
for Number := 0 to ListView1.Items.Count -1 do begin
Application.ProcessMessages;
if not listview1.Items[Number].Selected then Continue;
SendData(NewSocket,'Remove|' + listview1.Items[Number].SubItems[0]);
end;
Refresh1.Click;
end;
procedure TServiceManager.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
Listview1.Canvas.Brush.Color := $F7F7F7;
end;
procedure TServiceManager.ListView1CustomDrawSubItem(
Sender: TCustomListView; Item: TListItem; SubItem: Integer;
State: TCustomDrawState; var DefaultDraw: Boolean);
begin
Listview1.Canvas.Brush.Color := clWhite;
if (SubItem = 2) and (pos('Stopped',Item.SubItems[1])>0) then ListView1.Canvas.Font.Color := clRed
else ListView1.Canvas.Font.Color := clBlack;
end;
procedure TServiceManager.Edit1Click(Sender: TObject);
var
DisplayName: string;
ServiceName: string;
FileName: string;
Desc: string;
Startup: string;
STartNow: string;
begin
if not assigned(listview1.Selected) then exit;
EditService.Edit1.Text := Listview1.Selected.Caption;
EditService.Edit2.Text := Listview1.Selected.SubItems[0];
EditService.Edit3.Text := Listview1.Selected.SubItems[3];
EditService.Edit4.Text := Listview1.Selected.SubItems[4];
if Listview1.Selected.SubItems[2] = 'Automatic' then EditService.ComboBox1.Text := '2: Automatic';
if Listview1.Selected.SubItems[2] = 'Manual' then EditService.ComboBox1.Text := '3: Manual';
if Listview1.Selected.SubItems[2] = 'Disabled' then EditService.ComboBox1.Text := '4: Disabled';
if EditService.ShowModal <> mrok then exit;
DisplayName := EditService.Edit1.Text;
ServiceName := EditService.Edit2.Text;
FileName := EditService.Edit3.Text;
Desc := EditService.Edit4.Text;
Startup := copy(EditService.Combobox1.Text,1,1);
STartNow := '0';
SendData(NewSocket,'Edit|' + ServiceName + '|' + DisplayName + '|' + FileName + '|' + Desc + '|' + Startup + '|' + STartNow);
Refresh1.Click;
end;
procedure TServiceManager.Install1Click(Sender: TObject);
var
DisplayName: string;
ServiceName: string;
FileName: string;
Desc: string;
Startup: string;
STartNow: string;
begin
if CreateService.ShowModal <> mrok then exit;
DisplayName := CreateService.Edit1.Text;
ServiceName := CreateService.Edit2.Text;
FileName := CreateService.Edit3.Text;
Desc := CreateService.Edit4.Text;
Startup := copy(CreateService.Combobox1.Text,1,1);
STartNow := '0';
if CreateService.Checkbox1.Checked then StartNow := '1';
SendData(NewSocket,'Install|' + ServiceName + '|' + DisplayName + '|' + FileName + '|' + Desc + '|' + Startup + '|' + STartNow);
Refresh1.Click;
end;
procedure TServiceManager.Timer1Timer(Sender: TObject);
var
NewSocketData: TSocketData;
Li: TListItem;
begin
Li := GetListItem(Group,Computer,User);
if Li = nil then exit;
if Li.Data = nil then exit;
NewSocketData := TSocketData(Li.Data);
if NewSocketData.MainSocket = nil then exit;
UnitSharedData.SendData(NewSocketData.MainSocket,'NewConnection|ServiceManagerSocket|' + inttostr(Self.Handle));
end;
procedure TServiceManager.FormClose(Sender: TObject;
var Action: TCloseAction);
var
TmpSocket: TCustomWinSocket;
begin
Action := caFree;
try
TmpSocket := NewSocket;
NewSocket := nil;
if TmpSocket <> nil then TmpSocket.Close;
except
end;
end;
end.
delphi之远程服务管理类模块
最新推荐文章于 2018-02-26 16:12:20 发布