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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2011, 07:08   #1
Афанасий[vedma]
Вечнодумающий
Форумчанин
 
Аватар для Афанасий[vedma]
 
Регистрация: 14.07.2011
Сообщений: 161
По умолчанию Сервисы Windows

Помогите мне создать програмку - аналог services.msc
Из лоскутов Добра, шьется полотно Зла
Афанасий[vedma] вне форума Ответить с цитированием
Старый 03.11.2011, 09:00   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что она должна делать? Список сервисов и их управление?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.11.2011, 11:40   #3
Афанасий[vedma]
Вечнодумающий
Форумчанин
 
Аватар для Афанасий[vedma]
 
Регистрация: 14.07.2011
Сообщений: 161
По умолчанию

Она должна лишь показывать сервисы и все...без никаких редактирований
Из лоскутов Добра, шьется полотно Зла
Афанасий[vedma] вне форума Ответить с цитированием
Старый 03.11.2011, 12:39   #4
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Тут, например
Баламут вне форума Ответить с цитированием
Старый 03.11.2011, 14:07   #5
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Для ленивых - WMI (не только список служб, можно быстро получить любую информацию о системе, подставляя в запрос SELECT <поле> FROM <класс>), но этот механизм работает довольно медленно и сам зависит от службы WMI.

Код:
program DumpServicesWMI;

{$APPTYPE CONSOLE}

uses
  Windows, SysUtils, ActiveX, ComObj, Variants;

function StrToOem(const AnsiStr: AnsiString): AnsiString;
begin
  SetLength(Result, Length(AnsiStr));
  if Result <> '' then CharToOemBuffA(PAnsiChar(AnsiStr), PAnsiChar(Result), Length(Result));
end;

function GetWMIObject(const objectName: String): IDispatch;
var
  chEaten: Integer;
  BindCtx: IBindCtx;
  Moniker: IMoniker;
begin
  OleCheck(CreateBindCtx(0, bindCtx));
  OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));
  OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
end;

procedure DumpServices;
var
  objWMIService, colItems, colItem: OLEVariant;
  oEnum: IEnumVariant;
  iValue: LongWord;
begin
  objWMIService := GetWMIObject('winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2');
  colItems      := objWMIService.ExecQuery('SELECT * FROM Win32_Service','WQL',0);
  oEnum         := IUnknown(colItems._NewEnum) as IEnumVariant;
  while oEnum.Next(1, colItem, iValue) = 0 do
  begin
    writeln(StrToOem('Caption:  ' + colItem.Caption + ' ('+colItem.Name + ')' + #13#10 +
                     'State:    ' + colItem.State + #13#10 +
                     'PathName: ' + colItem.PathName + #13#10 +
                     '----------------------------------------------------------------'));
  end;
end;

begin
  try
    CoInitialize(nil);
    try
      DumpServices;
    finally
      CoUninitialize;
    end;
  except
    on E:Exception do Writeln(E.Classname, ': ', E.Message);
  end;
  Readln;
end.
Через API - OpenSCManager + EnumServicesStatus (код прямо из гугла, не проверял)

Код:
uses WinSvc;

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, SC_MANAGER_ALL_ACCESS);

  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;

............

  ServiceGetList('', SERVICE_WIN32, SERVICE_STATE_ALL, ListBox1.Items)
пыщь
JTG вне форума Ответить с цитированием
Старый 03.11.2011, 14:17   #6
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

нате, пользуйтесь.
исходник могу дать позже, если что-то понравится
Вложения
Тип файла: rar Servicesupx.rar (120.6 Кб, 15 просмотров)
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Windows 7 и сервисы - нужны ли пляски с бубном? Человек_Борща Общие вопросы Delphi 1 03.11.2010 09:52
Запущенные сервисы KoBRaAndrey Общие вопросы Delphi 17 03.02.2010 22:20
Сервисы (службы) NieL Win Api 2 20.11.2009 14:13
Сервисы, блин.... Баламут Win Api 6 28.12.2007 01:30
И снова сервисы Баламут Win Api 3 13.12.2007 01:26