Wyłączanie urządzeń z poziomu Delphi

Odpowiedz Nowy wątek
2006-11-09 17:45
mike_a
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.

Pozostało 580 znaków

2006-11-10 11:47
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');

<font color="red">Konto porzucone</span>

Dzięki wszystkim forumowiczom za lata wspólnych dyskusji; miłej zabawy w programowanie!
Sławomir 'Szczawik' Włodkowski

Pozostało 580 znaków

2006-11-10 19:35
mike_a
0

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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