Programowanie w języku Delphi » Gotowce

Zdalny shutdown - wylogowanie, wylaczenie, restartowanie komputerow w sieci lokalnej

  • 2006-02-06 14:48
  • 13 komentarzy
  • 1009 odsłon
  • Oceń ten tekst jako pierwszy
Dla poczatkujacych...

Na pewno każdy z Was chcial zgasic zrestartowac w klasie komputer. Jest to mozliwe pod warunkiem, ze jestescie zalogowani jako administratorzy. Wtedy mozecie zdalnie wyłaczać i restartowac komputery w sieci lokalnej a takze swoj komputer lokalny.

Wystarczy programowo uruchomic polecenie systemowe 'shutdown' z odpowiednimi parametrami (dziala na pewno na Windows XP/2003  - na pewno nie dziala na platformie 9x - co do NT, 2000: nie wiem, czy dziala). Na nowszych windach pewnie tez bedzie dzialalo... :)

Ponizej podalem przykladowa aplikacje, ktora realizuje to zadanie (pod warunkiem, ze login, ktorym sie zalogowaliscie do sytemu jest w grupie administratorów). Wystarczy dorobic interfejs graficzny i mamy przydatny programik.

Wiecej informacji na temat polecenia 'shutdown' mozna znalezc w systemowej konsoli wpisujac 'shutdown' bez parametrow.

program ZdalnyShutdown;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils, ShellApi;
 
var
  znak, czy_zdalny, polecenie : Char;
  // przechowuja: Znak T lub N - odpowiedz na pytanie, czy zastosowac
  // do zdalnego komputera, przechowuja: rodzaj zakonczenia pracy
  // (wylogowanie, restart, zamkniecie)
  ile_sek : Integer;
  // przechowuje czas wstrzymania przed zamknieciem/restartem systemu
  nazwa, tekst : String;
  // przechowuja: nazwe zdlanego komputera, tekst zawierajacy
  // parametry polecenia 'shutdown'
 
begin
  ile_sek := 0;   czy_zdalny := 'N';
 
  Write('Podaj polecenie dotyczace komputera'#13#10'(r - restart '
        + 's - wylaczenie l - wylogowanie (lokalnie), a - anulowanie): ');
  Readln(polecenie);
  // Uzytkownik musi wpisac jedna z liter: l, r, s, a, L, R, S, A.
  if Pos(polecenie, 'lrsaLRSA')=0 then  Exit;
  // Jesli nie wybrano anulowania restartu/zamkniecia systemu i wylogowania...
  if (UpCase(polecenie)<>'A')and(UpCase(polecenie)<>'L') then
   begin
     Write('Za ile sekund wykonac polecenie: ');   Readln(ile_sek);
     if ile_sek<0 then ile_sek := 0;  // liczba sekund nie moze byc ujemna
   end;
  // Jesli nie wybrano wylogowania to mozna odwolac sie do komputera w sieci...
  if UpCase(polecenie)<>'L' then
   begin
     Write('Czy polecenie wykonac na zdalnym komputerze [T/N]: ');
     Readln(czy_zdalny);
   end;
  // Jesli nie odwolano sie do komputera w sieci...
  if UpCase(czy_zdalny)<>'T' then
   begin
     if UpCase(polecenie)='A' then  tekst := '-' + polecenie
      else  tekst := '-' + polecenie + ' -f -t ' + IntToStr(ile_sek);
 
     Write('Czy napewno chcesz wykonac te operacje [T/N]? ');
     Readln(znak);
     if UpCase(znak)<>'T' then  Exit;
   end
   else
   begin
     Write('Podaj nazwe komputera w sieci LAN: ');
     Readln(nazwa);
     if UpCase(polecenie)='A' then  tekst := '-a -m ' + nazwa
      else  tekst := '-' + polecenie + ' -f -m ' + nazwa + ' -t '
                   + IntToStr(ile_sek);
   end;
 
  // Funkcja WinApi uruchamiajaca polecenie systemowe shutdown
  // z wybranymi wczesniej parametrami
  ShellExecute(0, 'open', PChar('shutdown'), PChar(tekst), nil, 0);
end.

Kodu nie opisywalem, bo wydaje mi sie zbyt banalny. W koncu jest w Delphi pomoc... :)
Ale jakby cos bylo niejasne do dajcie znac - dopisze...

Pozdrawiam, BcbMan.

Dodaj komentarz

Brak avatara

13 komentarzy

Sharkmen 2011-03-11 14:37

Jak zrobic aby wylogowanie nie bylo lokalne tylko przez LAN ?

syzer3 2009-01-05 08:08

w starszych windowsach uzywano polecenia
rundll32.exe User,ExitWindows
ze strony sysinternals mozna zrzucic darmowe narzedzie
psshutdown - ktore jest lepsze niz shoutdown bo moze zestartowac zdalny komp
z DOWOLNYMI poswiadczeniami uzytkownika
pozdrawiam Syzer

mnbvcX 2008-08-19 14:59

A nie lepiej zrobić tak?

ShellExecute(0, 'open', 'shutdown', '-i', nil, 0);

lub po prostu Start >> Uruchom >> shutdown -i ?

Coś od Microsoft Corporation, i to okienkowe :D

Demonical Monk 2008-01-17 10:19

Dodaj przynajmniej obsługę kodów przyczyny. Jeśli nie wiesz co to to w command line wpisz shutdown -?

Marooned 2006-02-06 17:24

<quote>Wystarczy programowo uruchomic polecenie systemowe 'shutdown'</quote>Tak się składa, że to nie jest polecenie systemowe, a zwyczajny program dołączany do Windows od wersji XP. W systemie Win2000 i wcześniejszych on nie występuje.

Niby na takie programy mówiło się "polecenia zewnętrzne", ale to było za czasów DOSa.

wormman 2006-01-18 20:33

Nom niezly niezly ale jak go wkleje na delphi to co mam potem robic moze szczegolowo bo ja jestem poczatkujacy mam delphi dopiero 4 dni

BcbMan 2006-01-30 13:52

tylko uruchomic :) i czytac wyswietlajace sie napisy - w koncu to gotowiec... (jesli dalej jest cos niejasne to musisz dokladniej okreslic problem)

BcbMan 2005-11-30 17:54

<quote>4. Napisał byś chociaż jak zrobić żeby program widział czy zamykanie sie powiodło</quote>
Nie wiem jak to napisac, ale poszukam rozwiazania... a moze Ty dopiszesz taki kawalek? Byloby to z korzyscia dla wszystkich odwiedzajacych i podniosloby poziom tego artykulu.

<quote>Sam dawałem tutaj podobną -> duplikat</quote>
Nie wypominaj innym, ze robia cos nie tak, jesli sam robisz dokladnie tak samo. Poza tym sprawdzalem, czy jest tu juz taki artykul i nic takiego nie znalazlem. Moze podasz mi link do swojego artykulu?

<quote>Kodu nie opisywalem, bo wydaje mi sie zbyt banalny. W koncu jest w Delphi pomoc...</quote>
Pomoc w Delphi ma sluzyc do zrozumienia kodu dla tych, ktorzy go nie zrozumieli (a zakladam, ze wiekszosc osob go rozumie). Kodu z nikad nie zerznalem - napisalem go sam.

Zamiast znacznikow 'delphi' stosuje znaczniki 'code'. Te pierwsze powodowaly przy ktoryms z moich artykulow, ze kod kopiowal sie wniewlasciwy sposob, uniemozliwiajac kompilacje programu. Totez wole ich nie stosowac.

Przyznaje, troche mnie lenistwo ogarnelo, ale problem naprawiam. Komentarze pojawia sie w artykule.

Chcialbym jeszcze zaznaczyc, ze moze artykul nie jest zbyt odkrywczy to zaznaczylem to wpisujac, ze jest dla poczatkujacych. Z pewnoscia wsrod wielu internautow odwiedzajacych te witryne znalazlo sie co najmniej kilku, ktorych ta wskazowka nie tylko wzbogacila o nowa wiedze, ale moze rowniez popchala do lepszego poznania dostepnych polecen konsoli systemowej.

Ciesze sie, ze jest zainteresowanie nawet tak "banalnym" artykulem. Czekam na dalsze komentarze :)

greenmag 2005-11-29 14:39

<quote>Czyli kod skads zernales, taki wniosek sie nasuwa</quote>

jesli ktos nie zamiescil komentarzy to nie znaczy od razu ze to nie jego kod !

inna sprawa ze powinien zamiescic

lofix 2005-11-28 15:24

<quote>
Kodu nie opisywalem, bo wydaje mi sie zbyt banalny. W koncu jest w Delphi pomoc... :)</quote>
Czyli kod skads zernales, taki wniosek sie nasuwa

Cool_Programming 2005-11-25 17:16

Dokladnie, artukuły w stylu \"uruchom program z parametrem\" sa mało odkrywczę, każdy powinien to znać, mniejsza o to iż takie wskazówki nie dotycza programowania. Sam dawałem tutaj podobną -> duplikat

milyges 2005-11-25 16:43

1. Windowsa 2000 możesz zamknąć z pod XP/2003
2. Możesz zamykać z pod Win 2000 jeśli przekopiujesz plik %SystemRoot%\\system32\\shutdown.exe z XP do 2000
3. Windows\'a NT chyba też mozna zamknąć zdalnie.
4. Napisał byś chociaż jak zrobić żeby program widział czy zamykanie sie powiodło :P

migajek 2005-11-25 16:23

no artykul to to IMO nie jest ... <_< zreszta malo odkrywcze ...