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

📄 service.pas

📁 delphi换肤控件2.0破解版,虽然版本不高但相当好用的。
💻 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;

{$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
  while not Terminated do
  begin
    ServiceThread.ProcessRequests(True);
//    Sleep(1);   // If you use ProcessRequests(False), insert a Sleep(1) or the service will eat all cpu power
  end;
end;


procedure TCoolTrayService.StopService1Click(Sender: TObject);
begin
//  WinExec(PChar('net stop '+Name), 0);  // Dirty indeed! Use ControlService instead!
  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
  MessageBox(0, PChar('Magic number is ' + IntToStr(MagicNumber)), 'Information', MB_ICONINFORMATION or MB_OK);
end;

end.

⌨️ 快捷键说明

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