Wyłączanie urządzeń z poziomu Delphi

0

Dzień dobry

czy z poziomu Delphi można wysłać przerwanie/sygnał wyłączające urządzenie np kartę sieciową?
Proszę jeszcze o odpowiedź na pytanie drugie; odwołanie się z poziomu Delphi do Services/Usług w Windows i wyłączanie bądż wstrzymanie usługi jest możliwe?

Pozdrawiam.

0

Co do pierwszego - nie znam odpowiedzi, ale w Windows nie wysyła się przerwań/sygnałów wyłączających urządzenie. Wystarczy wywołać odpowiednią funkcję systemową.

Co do drugiego. Oczywiście, że można zarządzać usługami.za pomocą Delphi. Możesz to zrobić funkcjami systemowymi, albo - prościej przez wywołanie programu konsolowego, choćby tak:
sc stop USLUGA

Jeśli jednak chcesz funkcjami to możesz tak (stworzyłem na szybko):

function ServiceStop(Service:string; Machine:string = ''):boolean;
var SCManager, SCService: SC_Handle;
    SCStatus: TServiceStatus;
    Check: DWord;
begin
SCManager := OpenSCManager(PChar(Machine), nil, SC_MANAGER_CONNECT);
if (SCManager>0) then
  begin
  SCService := OpenService(SCManager, PChar(Service), SERVICE_STOP or SERVICE_QUERY_STATUS);
  if (SCService>0) then
    begin
    if (ControlService(SCService, SERVICE_CONTROL_STOP, SCStatus)) then
      begin
      if (QueryServiceStatus(SCService, SCStatus)) then
        while (SERVICE_STOPPED<> SCStatus.dwCurrentState)do
          begin
          Check := SCStatus.dwCheckPoint;
          Sleep(SCStatus.dwWaitHint);
          if (not QueryServiceStatus(SCService, SCStatus)) or (SCStatus.dwCheckPoint<Check) then
            break;
          end;
      end;
      CloseServiceHandle(SCService);
    end;
    CloseServiceHandle(SCManager);
  end;
result:=(SERVICE_STOPPED=SCStatus.dwCurrentState);
end;

Wywołanie:

ServiceStop('USLUGA'); // lub
ServiceStop('USLUGA', '\NAZWAKOMPUTERA');
0

Dziękuje - oba rozwiązania OK! o to mi chodziło

1 użytkowników online, w tym zalogowanych: 0, gości: 1