⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 service.pas

📁 海康高清电视Delphi源码(带IE插件) ★ 智能识别插卡数量 ★ 自动启停视频预览窗口数量 ★ 窗口大小随意可调 ★ 可全屏观看 ★ 登录身份验证 ★ 登录IP地址验证 ★ 多达
💻 PAS
字号:
unit Service;

interface

uses
  Windows, Classes, SvcMgr, Menus, CoolTrayIcon;

type
  TCoolTrayService = class(TService)
    CoolTrayIcon1: TCoolTrayIcon;
    PopupMenu1: TPopupMenu;
    GetValue1: TMenuItem;
    SetValue1: TMenuItem;
    N1: TMenuItem;
    StopService1: TMenuItem;
    procedure ServiceExecute(Sender: TService);
    procedure StopService1Click(Sender: TObject);
    procedure ServiceAfterInstall(Sender: TService);
    procedure SetValue1Click(Sender: TObject);
    procedure GetValue1Click(Sender: TObject);
  public
    function GetServiceController: TServiceController; override;
  private
    MagicNumber: Integer;
  end;

var
  CoolTrayService: TCoolTrayService;

implementation

uses
  ShellApi, WinSvc, Registry, SysUtils, Dialogs;

{$R *.DFM}

function ServiceStop(aMachine, aServiceName: String): Boolean;
// aMachine is UNC path or local machine if empty
var
  h_manager, h_svc: SC_Handle;
  ServiceStatus: TServiceStatus;
  dwCheckPoint: DWORD;
begin
  h_manager := OpenSCManager(PChar(aMachine), nil, SC_MANAGER_CONNECT);
  if h_manager > 0 then
  begin
    h_svc := OpenService(h_manager, PChar(aServiceName),
                         SERVICE_STOP or SERVICE_QUERY_STATUS);
    if h_svc > 0 then
    begin
      if (ControlService(h_svc, SERVICE_CONTROL_STOP, ServiceStatus)) then
      begin
        if (QueryServiceStatus(h_svc, ServiceStatus)) then
        begin
          while (SERVICE_STOPPED <> ServiceStatus.dwCurrentState) do
          begin
            dwCheckPoint := ServiceStatus.dwCheckPoint;
            Sleep(ServiceStatus.dwWaitHint);
            if (not QueryServiceStatus(h_svc, ServiceStatus)) then
              // couldn't check status
              break;
            if (ServiceStatus.dwCheckPoint < dwCheckPoint) then
              break;
          end;
        end;
      end;
      CloseServiceHandle(h_svc);
    end;
    CloseServiceHandle(h_manager);
  end;

  Result := (SERVICE_STOPPED = ServiceStatus.dwCurrentState);
end;


procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  CoolTrayService.Controller(CtrlCode);
end;


function TCoolTrayService.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;


procedure TCoolTrayService.ServiceExecute(Sender: TService);
begin
//  ShowMessage('Start executing.');
  while not Terminated do
  begin
    ServiceThread.ProcessRequests(False);
  end;
//  ShowMessage('Done executing. Bye.');
end;


procedure TCoolTrayService.StopService1Click(Sender: TObject);
begin
//  WinExec(PChar('net stop '+Name), 0);  // Dirty indeed! Use ControlService in stead!
  ServiceStop('', Name);
  ReportStatus;              // Notify the Service Manager (Windows)
end;


procedure TCoolTrayService.ServiceAfterInstall(Sender: TService);
// Registers the service's description
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create(KEY_READ or KEY_WRITE);
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKey('System\CurrentControlSet\Services\' + Name, True) then
    begin
      Reg.WriteString('Description', 'A sample service using the CoolTrayIcon component.');
    end
  finally
    Reg.Free;
  end;
end;


procedure TCoolTrayService.SetValue1Click(Sender: TObject);
begin
  Randomize;
  MagicNumber := Random(100);
  GetValue1Click(Self);
end;


procedure TCoolTrayService.GetValue1Click(Sender: TObject);
begin
  MessageDlg('Magic number is ' + IntToStr(MagicNumber), mtInformation, [mbOK], 0);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -