Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2017, 14:50   #1
m3xTa1nes
Новичок
Джуниор
 
Регистрация: 17.10.2016
Сообщений: 2
Сообщение Вывод название служб в StringGrid

Помогите пожалуйста вывести название службы и состояние в StringGrid , а не в Listbox
Не знаю, как это осуществить со StingGridom. Вывод должен быть по одной кнопке, чтобы в первой колонке Название службы, а во второй ее состояние (Запущена или Остановлена)
Вот код с ListBox:
Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Winsvc;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    Button2: TButton;
    Button3: TButton;
    Label1: TLabel;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure StartService(ServiceName: string);
    procedure Button3Click(Sender: TObject);
    procedure StopService(ServiceName: string);
    procedure Button4Click(Sender: TObject);
    procedure ServiceStatus(ServiceName: string);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Form1: TForm1;



implementation
{$R *.dfm}
   // типы службы
  const
  SERVICE_KERNEL_DRIVER       = $00000001;
  SERVICE_FILE_SYSTEM_DRIVER  = $00000002;
  SERVICE_ADAPTER             = $00000004;
  SERVICE_RECOGNIZER_DRIVER   = $00000008;

  SERVICE_DRIVER              =
    (SERVICE_KERNEL_DRIVER or
     SERVICE_FILE_SYSTEM_DRIVER or
     SERVICE_RECOGNIZER_DRIVER);

  SERVICE_WIN32_OWN_PROCESS   = $00000010;
  SERVICE_WIN32_SHARE_PROCESS = $00000020;
  SERVICE_WIN32               =
    (SERVICE_WIN32_OWN_PROCESS or
     SERVICE_WIN32_SHARE_PROCESS);

  SERVICE_INTERACTIVE_PROCESS = $00000100;

  SERVICE_TYPE_ALL            =
    (SERVICE_WIN32 or
     SERVICE_ADAPTER or
     SERVICE_DRIVER  or
     SERVICE_INTERACTIVE_PROCESS);


function ServiceGetList(sMachine : string; dwServiceType, dwServiceState : DWord; slServicesList : TStrings ): boolean;

    const
   cnMaxServices = 4096;

 type
   TSvcA = array[0..cnMaxServices] of TEnumServiceStatus;
   PSvcA = ^TSvcA;

 var
   j:integer;  //временная переменная
   schm:SC_Handle; //управление службами
   nBytesNeeded,    // для буфера
   nServices, //кол-во служб
   nResumeHandle:DWord;      // указатель на следующую службу
   ssa : PSvcA;  // состояние службы
 begin
   Result := false;
   // подключаемся к управлению службами
   schm := OpenSCManager(PChar(sMachine),Nil, MAXIMUM_ALLOWED);
   // если удачно
   if(schm > 0)then
   begin
     nResumeHandle := 0;
     New(ssa);
     EnumServicesStatus(
       schm,
       dwServiceType,
       dwServiceState,
       ssa^[0],
       SizeOf(ssa^),
       nBytesNeeded,
       nServices,
       nResumeHandle );
     //
     // Предположим, что размер массива достаточен

     for j := 0 to nServices-1 do
     begin
      slServicesList.Add( StrPas(ssa^[j].lpDisplayName ) );
     end;
     Result := true;
     Dispose(ssa);
     // закрыть дескриптор управления службами
     CloseServiceHandle(schm);
   end;
 end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ServiceGetList( '', SERVICE_WIN32,SERVICE_STATE_ALL, ListBox1.Items);

end;



procedure TForm1.Button2Click(Sender: TObject);
var i:Integer;
begin
for i:=listbox1.items.count -1 downto 0 do
if listbox1.selected[i] then
begin
inttostr(i);
StartService(Listbox1.Items[i])
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var i:Integer;
begin
for i:=listbox1.items.count -1 downto 0 do
if listbox1.selected[i] then
begin
inttostr(i);
StopService(Listbox1.Items[i])
end;
end;

procedure TForm1.Button4Click(Sender: TObject);
var i:Integer;
begin
for i:=listbox1.items.count -1 downto 0 do
if listbox1.selected[i] then
begin
inttostr(i);
ServiceStatus(Listbox1.Items[i])
end;
end;

procedure TForm1.ServiceStatus(ServiceName: string);
var sStatus: SERVICE_STATUS;
    schSCManager: SC_HANDLE;
    schService: SC_HANDLE;
begin
  schSCManager:=OpenSCManager(nil,nil,MAXIMUM_ALLOWED);
  if schSCManager=0 then RaiseLastOSError;
  schService:=OpenService(schSCManager,PChar(ServiceName),MAXIMUM_ALLOWED);
  if schService=0 then RaiseLastOSError;
  if(QueryServiceStatus(schService,sStatus)) then begin
    case sStatus.dwCurrentState of
      SERVICE_STOPPED: Label1.Caption := 'Состояние: Остановлена';
      SERVICE_RUNNING: Label1.Caption := 'Состояние: Запущена';
    end;
  end;
end;

procedure TForm1.StartService(ServiceName: String);
var
  schService,
  schSCManager: Dword;
  p: PChar;
begin

  p := nil;
  schSCManager := OpenSCManager(nil, nil, MAXIMUM_ALLOWED);
  if schSCManager = 0 then
    RaiseLastWin32Error;
  try
    schService := OpenService(schSCManager, PChar(ServiceName), SERVICE_ALL_ACCESS);
    if schService = 0 then
      RaiseLastWin32Error;
    try
      if not Winsvc.startService(schService, 0, p) then
        RaiseLastWin32Error;
    finally
      CloseServiceHandle(schService);
    end;
  finally
    CloseServiceHandle(schSCManager);
  end;
end;


procedure TForm1.StopService(ServiceName: string);
var

  schService,
  schSCManager: DWORD;
  p: PChar;
  ss: _SERVICE_STATUS;
begin

  p := nil;
  schSCManager := OpenSCManager(nil, nil, MAXIMUM_ALLOWED);
  if schSCManager = 0 then
    RaiseLastWin32Error;
  try
    schService := OpenService(schSCManager, PChar(ServiceName), SERVICE_ALL_ACCESS);
    if schService = 0 then
      RaiseLastWin32Error;
    try
      if not ControlService(schService, SERVICE_CONTROL_STOP, SS) then
        RaiseLastWin32Error;
    finally
      CloseServiceHandle(schService);
    end;
  finally
    CloseServiceHandle(schSCManager);
  end;
end;


end.
m3xTa1nes вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод из StringGrid в Memo Grobovichok Помощь студентам 0 30.01.2011 14:37
Редактирование В stringgrid название столбцов через Edit Weyner Общие вопросы Delphi 2 21.10.2010 21:15
Вывод из StringGrid program123 Общие вопросы Delphi 1 16.06.2009 22:43
Вывод числа в stringGrid Rusl92 Общие вопросы Delphi 1 19.10.2008 17:48
как задать название FixedCols, FixedRows в StringGrid aslanbek Общие вопросы Delphi 1 14.03.2008 21:44